[英]How to design an index/query to avoid filesort in a simple MySQL query?
我有一个表entrytable
表,它有colums datum
, username
, status
, status_spam_user
, status_spam_system
和text
。
我想从具有username
, status
, status_spam_user
, status_spam_system
特定值的行中选择列文本的内容。 由于这会导致一长串条目(> 30'000),我想限制匹配行的数量。 在此之前,匹配的行应按列datum
排序。
SELECT text
FROM entrytable
WHERE user = 'username' &&
`status` = '1' && (
`status_spam_user` = 'no_spam'
|| (
`status_spam_user` = 'neutral' &&
`status_spam_system` = 'neutral'
)
)
ORDER BY datum DESC
LIMIT 6430 , 10
我在表格中添加了两个索引:
对于此查询,使用索引index_status_mit_spam
。 由于索引不包含列datum
,因此排序必须单独进行(即filesort)。 是否有可能以某种方式设计我的查询/索引,它对WHERE
以及ORDER BY
有用吗?
在status_spam_user / status_spam_system上添加一个索引on (user, status, datum)
索引因为OR条件(它被用于状态部分)而无法使用,并且必须在之前使用索引的所有先前部分按部分排序可以满足索引
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.