我需要一些建议。为了更一般化,我解释以下示例: 我有 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)
打开 inexes
`id` - PRIMARY
`category` - INDEX
`modified_on` - INDEX
(`enabled`,`deleted`) - INDEX
表包含 10-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.5秒,这取决于limit子句。
我是否需要为“类别”单独建立索引,因为有时我会浏览所有类别的所有帖子,或者我可以将“类别”添加到(启用
,删除
)每次我需要所有类别(~200)的帖子时索引并传递所有类别的 ID?
什么解决方案可以提高此类查询的速度?
提前致谢。
最佳答案
我认为您应该在索引中添加包含“已启用”和“已删除”的类别。
希望它能减少您的查询时间
关于使用 LIMIT、ORDER BY、bool 子句和 IN 子句优化 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224184/