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

Mysql SQL查询上次创建的项目性能,mysql,sql,indexing,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_

我正在尝试获取一个大表中最后创建的项,如下所示:

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`)

是否有更好的方法来获取上次为特定音频源创建的项目?

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

键引用三列。它不能仅使用键的
部分创建的
来加速查询。尝试在
处为刚刚创建的
创建一个附加键

作为参考,从MySQL文档:

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果上有一个三列索引(col1、col2、col3),则上有索引搜索功能

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

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


您真的需要使用
选择*
?。无论如何,您的查询似乎是正确的方法。我已经有了索引,但在本例中,我有另一个问题,它扫描整个表,试图找到音频源id。这没有帮助。没有。这三列是极好的。前两列处理所有的
,其中
,第三列由
执行
订单。我不知道为什么花了这么长时间。请提供
SHOW CREATE TABLE
EXPLAIN SELECT…