我有一个表entrytable
,其中包含列datum
,username
,status
,status_spam_user
,status_spam_system
和{{1 }}
我想从具有text
,username
,status
,status_spam_user
特定值的行中选择列文本的内容。由于这可能导致一长串条目(> 30'000),我想限制匹配行的数量。在此之前,匹配的行应按列status_spam_system
排序。
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
的信息,因此排序必须单独进行(即filesort)。是否可以以某种方式设计我的查询/索引,它对datum
以及WHERE
有用吗?
答案 0 :(得分:2)
在(user, status, datum)
上添加索引
由于OR条件(它被用于状态部分),因此无法使用status_spam_user / status_spam_system上的索引,并且必须先使用索引的所有先前部分,然后才能通过索引满足部分顺序