如何设计索引/查询以避免简单MySQL查询中的文件排序?
我有一个表如何设计索引/查询以避免简单MySQL查询中的文件排序?,mysql,indexing,query-optimization,filesort,Mysql,Indexing,Query Optimization,Filesort,我有一个表entrytable,其中包含列数据,用户名,状态,状态(垃圾邮件)用户,状态(垃圾邮件)系统和文本 我想从具有以下特定值的行中选择列文本的内容:username,status,status\u spam\u user,status\u spam\u system。因为这会导致一个长长的条目列表(>30000),所以我想限制匹配行的数量。在此之前,匹配行应按列datum排序 SELECT text FROM entrytable WHERE user = 'username' &
entrytable
,其中包含列数据
,用户名
,状态
,状态(垃圾邮件)用户
,状态(垃圾邮件)系统
和文本
我想从具有以下特定值的行中选择列文本的内容:username
,status
,status\u spam\u user
,status\u spam\u system
。因为这会导致一个长长的条目列表(>30000),所以我想限制匹配行的数量。在此之前,匹配行应按列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
我在表中添加了两个索引:
- 索引_基准(基准)
- 索引\u status\u mit\u spam(用户、状态、状态\u spam\u用户、状态\u spam\u系统)
index\u status\u mit\u spam
。由于索引不包含列数据的信息
,因此必须单独进行排序(即文件排序)。是否可以设计我的查询/索引,使其对WHERE
以及ORDER BY
有用?在上添加索引(用户、状态、数据)
状态\垃圾邮件\用户/状态\垃圾邮件\系统上的索引无法使用,因为存在或条件(该索引一直使用到状态部分),必须先使用索引的所有以前部分,然后才能通过索引满足订单要求。请发布解释计划。。