使用LIMIT,ORDER BY,bool子句和IN子句进行MySQL查询优化

时间:2013-03-05 12:46:30

标签: 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
`modified_on` - DATETIME
`enabled` - TINYINT(1)
`deleted` - TINYINT(1)

有不和之处

`id` - PRIMARY
`category` - INDEX
`modified_on` - INDEX
(`enabled`,`deleted`) - INDEX

表包含10-15百万条记录。我在做查询

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子句。

我是否需要单独的“类别”索引,因为有时我正在浏览所有类别的所有帖子,或者我可以将“类别”添加到(enableddeleted)索引并传递ID所有类别(约200)每次我需要所有类别的帖子?

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为你应该在包含'enabled'和'deleted'的索引中添加类别。

希望它会缩短您的查询时间