作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 180 万行的项目表:
Item
-----------
- id
- title
- content
- channel_id
和一个包含 8000 多行的 channel 表:
Channel
-----------
- id
- name
我需要的是在每个结果中显示来自名为“global”的 channel 的项目,例如我有以下 channel :
id | name
________________
1 | global
2 | restaurants
3 | hotels
...
所以我尝试了以下咨询:
SELECT * FROM Item WHERE channel_id = 1 OR channel_id = 2 ORDER BY title ASC LIMIT 10
SELECT * FROM Item WHERE channel_id IN (1, 2) ORDER BY title ASC LIMIT 10
两者都需要大约 18 秒! ...并且已经有 id 和 channel_id 两个索引
更新
看起来问题出在 ORDER BY 子句而不是 OR 或 IN 运算符,要订购的商品太多。
更新我已经解决了这个为标题创建索引的问题:
CREATE INDEX item_by_title ON item (title ASC)
最佳答案
通过按标题排序,您将对 180 万个元组强制执行最后的排序步骤,只是为了获得前 10 条记录。例如,尝试按 id 排序。
关于sql - 如何在 PostgreSQL 中使用 OR 或 IN 运算符提高查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300308/
我是一名优秀的程序员,十分优秀!