2014-11-10 19 views
10

Tôi đang cố gắng chẩn đoán truy vấn chậm, sử dụng EXPLAIN ANALYZE. Tôi mới vào lệnh vì vậy tôi đã đọc http://www.postgresql.org/docs/9.3/static/using-explain.html. Kế hoạch truy vấn sử dụng một "CTE quét", nhưng tôi không biết đó là gì, so với, nói, quét tuần tự - và quan trọng hơn, quét CTE có nghĩa là gì nói chung cho hiệu năng truy vấn.Quét CTE là gì và ý nghĩa của nó đối với hiệu suất là gì?

+0

Đây là một chủ đề nâng cao và tôi không thể nghĩ ra một lời giải thích của giáo dân. Xem https://wiki.postgresql.org/wiki/CTEReadme - chỉ cần tin tưởng optmizer, nó chắc chắn không phải là xấu như một seqscan (làm thế nào xấu nó có thể phụ thuộc vào cardinality dữ liệu). –

+0

Hiển thị truy vấn của bạn và/hoặc giải thích kết quả. –

Trả lời

15

A "CTE quét" là một quét tuần tự của các kết quả cụ thể hóa của một thuật ngữ CTE (một phần tên như "blah" trong một CTE như WITH blah AS (SELECT ...).

Materialized nghĩa là PostgreSQL đã tính toán kết quả và biến chúng thành một cửa hàng tạm thời của hàng, nó không chỉ sử dụng CTE như một cái nhìn,

Ý nghĩa chính là chọn một tập nhỏ từ một thuật ngữ CTE và loại bỏ phần còn lại có thể làm rất nhiều công việc lãng phí, vì các phần bạn hủy vẫn phải được tính đầy đủ.

Để biết chi tiết, hãy xem a recent blog post I wrote on the topic.