Tôi có một truy vấn tham gia hai bảng, TableA và TableB bằng cách sử dụng một vòng lặp lồng nhau. Do sự gắn kết "equi" -join, tất cả các hàng được trả lại trong kết quả do đó sẽ tương ứng với ít nhất một hàng từ mỗi trong hai bảng này. Tuy nhiên, theo kế hoạch (EXPLAIN ANALYZE), số hàng thực tế là 0 từ TableB, mặc dù một hàng được trả về trong kết quả cuối cùng. Làm cách nào để hàng thực tế đếm bằng 0 ở đây?Tại sao hàng đếm 0 trong kế hoạch PostgreSQL của tôi?
Dưới đây là kế hoạch thực hiện:
=> explain analyze select p.id, p.title, s.count from products p, stock s where p.id = s.p_id and s.w_id = 6 and p.type = 9 and s.count > 0 order by p.title;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Sort (cost=42.42..42.42 rows=2 width=36) (actual time=0.198..0.199 rows=1 loops=1)
Sort Key: p.title
Sort Method: quicksort Memory: 25kB
-> Nested Loop (cost=0.00..42.41 rows=2 width=36) (actual time=0.170..0.181 rows=1 loops=1)
-> Seq Scan on products p (cost=0.00..9.25 rows=4 width=32) (actual time=0.068..0.106 rows=4 loops=1)
Filter: (type = 9)
-> Index Scan using stock_pk on stock s (cost=0.00..8.28 rows=1 width=8) (actual time=0.015..0.015 rows=0 loops=4)
Index Cond: ((w_id = 6) AND (p_id = p.id))
Filter: (count > 0)
Total runtime: 0.290 ms
Và hai định nghĩa bảng ... Các sản phẩm bảng đầu tiên:
=> \d products
Table "public.products"
Column | Type | Modifiers
--------+------------------------+-----------
id | integer | not null
title | character varying(100) |
type | integer |
price | double precision |
filler | character(500) |
Indexes:
"products_pkey" PRIMARY KEY, btree (id)
"products_type_idx" btree (type)
Referenced by:
TABLE "orderline" CONSTRAINT "orderline_p_id_fkey" FOREIGN KEY (p_id) REFERENCES products(id)
TABLE "stock" CONSTRAINT "stock_p_id_fkey" FOREIGN KEY (p_id) REFERENCES products(id)
Bảng chứng khoán:
=> \d stock
Table "public.stock"
Column | Type | Modifiers
--------+---------+-----------
w_id | integer | not null
p_id | integer | not null
count | integer |
Indexes:
"stock_pk" PRIMARY KEY, btree (w_id, p_id)
"stock_p_id_idx" btree (p_id)
Foreign-key constraints:
"stock_p_id_fkey" FOREIGN KEY (p_id) REFERENCES products(id)
"stock_w_id_fkey" FOREIGN KEY (w_id) REFERENCES warehouses(id)
Đăng truy vấn và kế hoạch giải thích, vui lòng – Samson
Phiên bản PostgreSQL của bạn là gì? – vyegorov