我正在尝试在这样的大表中获取最后创建的项目:
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`)
有没有更好的方法来获取特定音频源的最后一个创建项目?
答案 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)
在您的选择中,指定所需的列而不是选择*