2016-05-24 12 views
20

Tôi đã xem qua câu hỏi này:sẽ "Where 0 = 1" phân tích bảng đầy đủ hoặc chỉ trả lại tên cột

SQL Server: Select Top 0?

Tôi muốn hỏi nếu tôi sử dụng các truy vấn

SELECT * FROM table WHERE 0=1 

hoặc

SELECT TOP 0 * FROM table 

nó sẽ chỉ trả lại tên cột ngay lập tức, hoặc nó sẽ tiếp tục phân tích toàn bộ bảng và cuối cùng trả lại kết quả bằng không?

Tôi có một bảng sản xuất với 10.000 hàng - nó sẽ kiểm tra điều kiện WHERE trên mỗi hàng?

+10

Các ưu SQL Server truy vấn là đủ thông minh để thấy rằng 'Ở ĐÂU 0 = 1' thể *** bao giờ *** là đúng và do đó không bận tâm kiểm tra bất kỳ hàng - vô nghĩa .... –

+0

những gì về các máy chủ khác như oracle là họ quá thông minh? – Friendy

+4

Hầu hết trong số họ, nếu không phải tất cả, có thể là ... –

Trả lời

30

Các truy vấn SQL server tối ưu hóa là đủ thông minh để hình dung ra rằng tình trạng này có thể WHEREbao giờ tạo ra một kết quả true trên bất kỳ liên tiếp, vì vậy nó không bận tâm thực sự quét bàn.

Nếu bạn nhìn vào kế hoạch thực hiện thực tế cho một truy vấn như vậy, thật dễ dàng để thấy rằng đang được thực hiện và truy vấn trả về ngay lập tức:

enter image description here

+0

Xin chào @Marc_S, liên kết hình ảnh của bạn hiện không hoạt động. vì vậy xin vui lòng bạn có thể cập nhật nó. – Ajay2707

+1

@ Ajay2707 nó ở đó. Ý bạn là "không làm việc" nghĩa là gì? – zerkms

+0

@ Ajay2707: nó không phải là một liên kết - nó chỉ là một ảnh chụp màn hình đơn giản .... –

2

Cả hai truy vấn được sử dụng để nhận được một bộ trống của bảng;

SELECT TOP 0 * FROM table 
SELECT * FROM table WHERE 0=1 

Cũng như cho đạt được dưới điều:

  1. Để có được cùng một cấu trúc của tên cột
  2. Được sử dụng để biết chi tiết cột trở lại nhưng không có dữ liệu
  3. Và muốn truy vấn để kiểm tra kết nối
+0

yup, tôi đã sử dụng để tải trọng cho một Widget Tìm kiếm trong khi hiển thị dữ liệu bằng 0 nhưng tên cột, tôi chỉ lo lắng về nó sẽ phân tích cú pháp đầy đủ bàn hay không. – Friendy

+0

nó chỉ trả về tên cột, vì vậy đừng lo lắng về việc sử dụng 0 = 1. –

5

Trong truy vấn

SELECT * FROM table WHERE 0=1 

khoản WHERE sẽ không bao giờ đúng vì vậy SQL Server sẽ không quét tất cả bảng của bạn.

Và trong truy vấn

SELECT TOP 0 * FROM table 

bạn đang xác định TOP 0 để SQL Server là rất thông minh nên nó không bao giờ quét bảng của bạn cho trở về 0 hàng.

Cả hai truy vấn sẽ chỉ trả về các tiêu đề cột.

15

MySql đủ thông minh để phát hiện và biết không thể thực hiện được.

desc SELECT * FROM table WHERE 0=1; 

enter image description here

+0

siêu cảm ơn cho câu trả lời bổ sung :) – Friendy

Các vấn đề liên quan