我需要一些建议。为了更普遍,我用下面的例子来解释:我有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)每次我需要所有类别的帖子?
有什么解决方案可以提高这类查询的速度?
我认为你应该在索引中添加包含'启用'和'删除'的类别。
希望能减少您的查询时间