2010-06-30 4 views
5

SO post nêu chi tiết một số lợi ích về hiệu suất liên quan đến các bảng Có nguồn gốc so với Tạm thời.Khi nào không thích hợp để sử dụng các bảng có nguồn gốc?

Khác với hiệu suất, những tình huống tồn tại mà bảng có nguồn gốc sẽ không phù hợp.

Một câu trả lời cho mỗi bài đăng có ví dụ sẽ hữu ích.

+0

Đó [câu hỏi được gắn thẻ cho SQL Server] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables), vì vậy thông tin cần được xem xét cụ thể cho nó và không phải cho tất cả các cơ sở dữ liệu. –

Trả lời

1

Tôi muốn thực hiện một số tự tham gia trên bảng tạm thời so với bảng có nguồn gốc.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

so với sử dụng một bảng có nguồn gốc, nơi bạn phải viết toàn bộ truy vấn hai lần:

SELECT ... 
FROM (SELECT ...) 
JOIN (SELECT ...) ON ...conditions...; 

Nhưng giải pháp khác là sử dụng biểu thức bảng chung mà là hơi khác nhau từ các bảng có nguồn gốc:

WITH foo AS (SELECT ...) 
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

Miễn là bạn sử dụng nhãn hiệu cơ sở dữ liệu hỗ trợ cú pháp này (Microsoft, Oracle, IBM, PostgreSQL).

1

Phạm vi có thể là một. Tôi nghĩ rằng các bảng tạm thời có thể được thực hiện truy cập đến các giao dịch/quy trình khác, vv Các bảng có nguồn gốc được giới hạn trong khối mà chúng được khai báo.

1

Nếu bạn phải truy cập vào dữ liệu trong bảng tạm thời trong nhiều truy vấn nó có thể là ít tốn kém để tránh tạo ra các dữ liệu tạm thời liên tục:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo WHERE ...conditions...; 

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...;