相关疑难解决方法(0)

为什么STRAIGHT_JOIN如此大幅度地改进了这个查询,以及在SELECT关键字之后编写它意味着什么?

我有以下MySql查询:

select t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

运行大约需要30秒,这很奇怪,因为如果我注释掉连接或where子句,它需要不到一秒钟:即

select t1.*
from Table1 t1
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

要么

select t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = t2.CommonID
Run Code Online (Sandbox Code Playgroud)

每个不到一秒钟.

然后是STRAIGHT_JOIN关键字,我可以在这里找到一个参考:http: //dev.mysql.com/doc/refman/5.0/en/join.html

STRAIGHT_JOIN类似于JOIN,只是左表始终在右表之前读取.这可以用于连接优化器以错误顺序放置表的那些(少数)情况.

什么?我可以写:

select t1.*
from Table1 t1
STRAIGHT_JOIN  Table2 t2
on t1.CommonID = t2.CommonID
where t1.FilterID = 1
Run Code Online (Sandbox Code Playgroud)

并且查询在不到一秒的时间内执行.

更奇怪的是,我可以写:

select STRAIGHT_JOIN  t1.*
from Table1 t1
inner join Table2 t2
on t1.CommonID = …
Run Code Online (Sandbox Code Playgroud)

mysql join

53
推荐指数
1
解决办法
2万
查看次数

MySQL性能优化:按日期时间字段排序

我有一个包含大约100.000个博客帖子的表格,通过1:n关系链接到包含50个Feed的表格.当我使用selects语句查询两个表时,由postss表的datetime字段排序,MySQL总是使用filesort,导致查询时间非常慢(> 1秒).这是postings表格的架构(简化):

+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                  | int(11)      | NO   | PRI | NULL    | auto_increment |
| feed_id             | int(11)      | NO   | MUL | NULL    |                |
| crawl_date          | datetime     | NO   |     | NULL    |                |
| is_active           | tinyint(1)   | NO   | MUL | 0       |                |
| link                | varchar(255) | NO   | MUL | NULL    |                |
| …
Run Code Online (Sandbox Code Playgroud)

mysql performance select

37
推荐指数
1
解决办法
3万
查看次数

按日期desc排序时,"使用临时"会减慢查询速度

我有一个日志条目表,以及大约100个可能的日志代码的描述表:

CREATE TABLE `log_entries` (
  `logentry_id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime NOT NULL,
  `partner_id` smallint(4) NOT NULL,
  `log_code` smallint(4) NOT NULL,
  PRIMARY KEY (`logentry_id`),
  KEY `IX_code` (`log_code`),
  KEY `IX_partner_code` (`partner_id`,`log_code`)
) ENGINE=MyISAM ;

CREATE TABLE IF NOT EXISTS `log_codes` (
  `log_code` smallint(4) NOT NULL DEFAULT '0',
  `log_desc` varchar(255) DEFAULT NULL,
  `category_overview` tinyint(1) NOT NULL DEFAULT '0',
  `category_error` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`log_code`),
  KEY `IX_overview_code` (`category_overview`,`log_code`),
  KEY `IX_error_code` (`category_error`,`log_code`)
) ENGINE=MyISAM ;
Run Code Online (Sandbox Code Playgroud)

以下查询(匹配10k的20k行)在0.0034秒(使用LIMIT 0,20)中执行:

SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql indexing query-optimization

5
推荐指数
1
解决办法
1368
查看次数

标签 统计

mysql ×3

indexing ×1

join ×1

performance ×1

query-optimization ×1

select ×1