小编Bac*_*ing的帖子

为PostgreSQL查询选择正确的索引

简化表:

CREATE TABLE products (
product_no integer PRIMARY KEY,
sales integer,
status varchar(16),
category varchar(16));

CREATE INDEX index_products_sales ON products (sales);
CREATE INDEX index_products_status ON products (status);
CREATE INDEX index_products_category ON products (category);
Run Code Online (Sandbox Code Playgroud)

PostgreSQL版本是8.4.列"状态"和"类别"

15个类别中有2000万个产品/行.

最常用的查询之一是获得三个最畅销的产品,不包括'cat3'和'cat7'类别的产品:

SELECT product_no, sales 
FROM products 
WHERE status = 'something' AND category NOT IN ('cat3', 'cat7') 
ORDER BY sales DESC 
LIMIT 3;

Limit  (cost=0.00..8833.39 rows=3 width=12) (actual time=9235.332..9356.284 rows=3 loops=1)
   ->  Index Scan using index_products_sales on products  (cost=0.00..68935806.85 rows=23412 width=12) (actual time=9235.327..9356.278 rows=3 loops=1)
     Filter: …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing performance postgresql-8.4

3
推荐指数
1
解决办法
5952
查看次数