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…
。