这个查询有什么问题?从包含22万多条记录的mysql表加载数据需要0.5到0.6秒
SELECT correct
FROM `answers`
WHERE `assignment_id` =2055
AND (
`correct` = 'N' || 'NA'
)
AND `topic_id` = '50#j1_5'
AND `student_id`
IN ( 702, 223, 237, 252, 229, 246, 1050, 256, 248, 1049, 243, 241, 244, 242, 249, 236, 250, 245 )
LIMIT 0 , 30
有谁能帮助我们更快地获取数据?请看解释结果
2条答案
按热度按时间pkbketx91#
那是什么意思?
好吧,这两个都不是。
要运行得更快,请添加以下综合索引:
列的顺序很重要(但这并不是唯一的最佳排序。)单列上的索引没有那么好。kichstart的两个索引都没有那么好,因为它没有包含所有
=
列在先。基数无关紧要。
数字与字符串——在索引中并不重要。
jm81lzqq2#
这不是一个完整的答案(至少目前是这样),但太大了,不能作为一个评论。
可以向表中添加索引。这样做的语法是here:-
https://dev.mysql.com/doc/refman/8.0/en/create-index.html
我想,在assignment\u id和student\u id列上建立索引可能最有帮助。
这可能需要一些时间(tbh,可能不是在这种情况下,而是需要注意更大/更复杂的索引)。
请注意,mysql通常会在表上使用单个索引,而不是合并索引。因此,您可以设置一个包含多个列的索引。