选择后的MySql连接 - 慢速查询

时间:2011-10-14 11:26:05

标签: mysql

我有100,000行,此查询有时可能需要2秒钟。我正在尝试优化它并成功使用DESC索引“创建”字段。我正在尝试进一步优化这个查询,我想知道这个查询是否实际上加入了所有100,000行的“轨道”,而不仅仅是我实际需要的12个。这会导致查询速度变慢吗?

查询:

SELECT `p`.`id` as performance_id, `p`.`performers`, `t`.`name` as track_name, `p`.`location`, `p`.`fms_id`
FROM (`performances` p)
JOIN `tracks` t ON `p`.`track` = `t`.`id`
WHERE (p.status = 1 OR (p.status != 2 && p.flagged < 3))
AND `p`.`prop` IN ('1', '2', '3', '4', '5', '6', '8', '10', '11', '13') 
AND `p`.`track` IN ('17', '9', '5', '15', '2', '3', '8', '6', '12', '4', '1') 
AND `p`.`type` IN ('1', '0', '2') 
ORDER BY `p`.`created` desc
LIMIT 0, 12

说明:

1   SIMPLE  p   index   track,prop,flagged,status,type  created_desc    5   NULL    239 Using where
1   SIMPLE  t   eq_ref  PRIMARY PRIMARY 4   database_name.p.track   1   Using where

1 个答案:

答案 0 :(得分:1)

将临时表用于轨道列表,并将该临时表与主查询连接,而不是使用“IN”子句。通常,避免使用IN子句,因为查询计划中的项目数量可能会增加。

在性能表的“track”列上创建索引会产生所需的行为(查询不会加入所有100,000行的'tracks'。)

http://apps.ycombinator.com/item?id=2206406

http://dbaspot.com/sybase/240012-plan-change-clause-number-set-elements-print.html