SQL查询上次创建的项目性能

时间:2015-03-25 18:22:11

标签: mysql sql indexing

我正在尝试在这样的大表中获取最后创建的项目:

SELECT `raw_detection`.* FROM `raw_detection`  
WHERE `raw_detection`.`duplicated` = 0 
AND `raw_detection`.`audio_source_id` = 100  
ORDER BY created_at desc LIMIT 1

但是这个查询需要很长时间才能运行(超过2秒)。

我有这个索引:

  KEY `index_raw_detections_audio_source`(`audio_source_id`,`duplicated`,`created_at`)

有没有更好的方法来获取特定音频源的最后一个创建项目?

2 个答案:

答案 0 :(得分:0)

您的密钥引用了三列。它不能仅用于仅使用密钥的created_at部分来加速查询。尝试仅为created_at创建一个附加键。

供参考,来自MySQL doc:

  

如果表具有多列索引,则优化程序可以使用索引的任何最左前缀来查找行。例如,如果您在(col1,col2,col3)上有一个三列索引,则您已在

上建立了索引搜索功能      

(col1),(col1,col2)和(col1,col2,col3)。

     

如果列不构成索引的最左前缀,则MySQL无法使用索引执行查找。

https://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

答案 1 :(得分:-2)

在您的选择中,指定所需的列而不是选择*