0

我有一张桌子entrytable,里面有datum, username, status, status_spam_user,status_spam_systemtext.

我想从具有username, status, status_spam_user,的特定值的行中选择列文本的内容status_spam_system。由于这可能会导致一长串条目(> 30'000),我想限制匹配行的数量。在此之前,匹配的行应按 column 排序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_datum(基准)
  • index_status_mit_spam(用户,状态,status_spam_user,status_spam_system)

对于此查询,index_status_mit_spam使用索引。由于索引不包含列datum的信息,因此必须单独进行排序(即文件排序)。是否可以以某种方式设计我的查询/索引,它对WHERE以及有用ORDER BY

4

1 回答 1

2

在 status_spam_user/status_spam_system上的 index 上添加索引(user, status, datum) 不能使用,因为 OR 条件(它被使用到状态部分),并且必须使用索引的所有先前部分才能满足 order by part一个索引

于 2013-01-03T14:10:59.700 回答