使用LIMIT、ORDERBY、bool子句和IN子句优化MySQL查询

使用LIMIT、ORDERBY、bool子句和IN子句优化MySQL查询,mysql,optimization,limit,in-clause,Mysql,Optimization,Limit,In Clause,我需要一些建议。更一般地说,我将解释以下示例: 我有MySQL InnoDB表“posts”,其中包含字段: `id` - INT UNSIGNED AUTOINCREMENT `title` - VARCHAR(100) `abstract` - TEXT #can be converted to VARCHAR(2048) `content` - TEXT #text + thml tags `category` - SMALLINT `created_on` - DATETIME `mod

我需要一些建议。更一般地说,我将解释以下示例: 我有MySQL InnoDB表“posts”,其中包含字段:

`id` - INT UNSIGNED AUTOINCREMENT
`title` - VARCHAR(100)
`abstract` - TEXT #can be converted to VARCHAR(2048)
`content` - TEXT #text + thml tags
`category` - SMALLINT
`created_on` - DATETIME
`modified_on` - DATETIME
`enabled` - TINYINT(1)
`deleted` - TINYINT(1)
不精确

`id` - PRIMARY
`category` - INDEX
`modified_on` - INDEX
(`enabled`,`deleted`) - INDEX
表包含1000-1500万条记录。我在做查询

SELECT id, title, abstract FROM posts 
WHERE enabled = 1 AND deleted = 0 
    AND category IN ( {id's} )
ORDER BY modified_on DESC 
LIMIT {offset}, {limit}
对MySQL服务器有50-100个并发请求,它就会停止运行。 每个查询在0.1-0.5s内执行,取决于limit子句

我是否需要为“类别”单独索引,因为有时我浏览所有类别的所有帖子,或者我可以将“类别”添加到(
已启用(
)、
已删除(/code>)索引中,并在每次我需要所有类别的帖子时传递所有类别的id(~200)

哪些解决方案可以提高此类查询的速度


提前感谢。

我认为您应该在包含“已启用”和“已删除”的索引中添加类别


希望它能减少您的查询时间

看看解释语句,它会帮助您获得更多信息。您的
偏移量
限制
有多大?限制通常是10-100,偏移量可以是0到1000-1500万之间的任意一个。这是分页,它是缓存的,但每次更改POST
modified\u on
后都会更改为。实际上
modified\u on
最好调用
last\u open\u on
。所以每次有人查看任何帖子时,缓存都会变得无效——从那时起,这篇帖子应该是分页中的第一篇。