我有一个表entrytable
,其中包含列datum
、用户名
、status
、 status_spam_user
、status_spam_system
和 text
。
我想从具有 username
、status
、status_spam_user
、 特定值的行中选择列文本的内容>status_spam_system
。由于这可能会导致一长串条目(> 30'000),因此我想限制匹配行的数量。在此之前,匹配的行应按数据列排序。
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_datum(数据)
- index_status_mit_spam(用户、状态、status_spam_user、status_spam_system)
对于此查询,使用索引index_status_mit_spam
。由于索引不包含datum
列的信息,因此必须单独进行排序(即文件排序)。是否可以以某种方式设计我的查询/索引,使其对 WHERE
以及 ORDER BY
有用?
最佳答案
在(用户、状态、数据)上添加索引
由于 OR 条件,无法使用 status_spam_user/status_spam_system 上的索引(已使用到状态部分),并且必须使用索引的所有先前部分才能满足 order by 部分的索引
关于mysql - 如何设计索引/查询以避免简单 MySQL 查询中的文件排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140504/