MySQL查询优化,包括LIMIT, ORDER BY, bool子句和IN子句



我需要一些建议。为了更普遍,我用下面的例子来解释:我有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万条记录。我正在执行query

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}
当有50-100个并发请求到MySQL服务器时,它会关闭。每个查询执行时间为0.1-0.5s,具体取决于limit子句。

我是否需要为"类别"单独索引,因为有时我正在浏览所有类别的所有帖子,或者我可以将"类别"添加到(enabled, deleted)索引并通过所有类别的id(~200)每次我需要所有类别的帖子?

有什么解决方案可以提高这类查询的速度?

我认为你应该在索引中添加包含'启用'和'删除'的类别。

希望能减少您的查询时间

最新更新