sql - 查询性能改进——排序过滤器

标签 sql performance postgresql query-optimization postgresql-performance

如何提高这个查询的性能:

SELECT designs.* FROM designs
WHERE designs.state = 'in_stock'
ORDER BY designs.grade, id DESC

解释输出:

 Sort  (cost=47475.35..47591.91 rows=46621 width=763)
   Sort Key: grade, id
   ->  Seq Scan on designs  (cost=0.00..12304.20 rows=46621 width=763)
         Filter: ((state)::text = 'in_stock'::text)

该表有超过 250000 条记录。

state 上建立索引没有多大帮助。

最佳答案

1) 命名列而不是 * 例如 Select col1, col2....是否需要所有列都在结果集中?如果不显示,仅显示您需要的这些列。

2) 你把索引放在了哪些列上?尝试对州建立索引并包括年级和 ID。

3) state = 'in_stock ' 可以替换为过滤整数值并产生相同结果的东西吗?是否可以将状态字段本身转换为 int 类型并进行索引,然后为这些整数值创建一个查找表?

关于sql - 查询性能改进——排序过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27598591/

相关文章:

sql - 优化多列 LIKE SQL 查询的一些最佳实践是什么?

MYSQL批量INSERT慢

c# - 如何在客户端系统中加载一次Javascript文件并重复使用它们?

python - Django:按交集结果过滤查询集

sql - 如何插入一条记录并返回主键来更新另一个表中的外键?

c# - 如何在 VS2012 中创建本地数据库缓存?

mysql - 在 SQL 中选择 MIN()

MySQL RegExp - 高级用法

c++ - Case 语句中的数组

ruby-on-rails - Rails Postgres - 日期时间值不会保存到日期时间列中