0

我需要一些建议。更笼统地说,我在以下示例中进行了解释:我有 MySQL InnoDB 表“帖子”,其中包含以下字段:

`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)

使用 inexes

`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.5 秒内执行,它取决于限制子句。

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

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

提前致谢。

4

1 回答 1

1

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

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

于 2013-03-05T12:50:27.270 回答