使用 LIMIT、ORDER BY、bool 子句和 IN 子句优化 MySQL 查询

标签 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)

打开 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/

相关文章:

python - Python 中的高效二维互相关?

java - 一个接口(interface)只能实现一个参数化——如何解决?

超出 Java GC 开销限制。大量的 HashMap 和优先级队列。我能做些什么?

php - MySQL多关键字搜索算法

python - 我如何减少我正在分析巨大数据集并使用 plotly 绘图的 Jupyter Notebook 的大小?

MySQL 时区 'current session' - 是 IP 还是连接?

python - 具有大数据集的 Keras 模型的超参数优化

mysql - 如何允许用户 sql 访问仅限于某些行的表?

php - 按时间顺序对 MySQL 记录进行排序?

mysql - 自动生成表并按名称分组值并获取多个值