Dưới đây là top 3 của tôi.
Số 1. Không chỉ định danh sách trường. (Chỉnh sửa: để tránh nhầm lẫn: đây là quy tắc mã sản xuất. Nó không áp dụng cho các tập lệnh phân tích một lần - trừ khi tôi là tác giả.)
SELECT *
Insert Into blah SELECT *
nên là
SELECT fieldlist
Insert Into blah (fieldlist) SELECT fieldlist
Số 2. Sử dụng một con trỏ và vòng lặp while, khi một vòng lặp while có biến vòng lặp sẽ làm.
DECLARE @LoopVar int
SET @LoopVar = (SELECT MIN(TheKey) FROM TheTable)
WHILE @LoopVar is not null
BEGIN
-- Do Stuff with current value of @LoopVar
...
--Ok, done, now get the next value
SET @LoopVar = (SELECT MIN(TheKey) FROM TheTable
WHERE @LoopVar < TheKey)
END
Số 3. DateLogic thông qua các loại chuỗi.
--Trim the time
Convert(Convert(theDate, varchar(10), 121), datetime)
Nên là
--Trim the time
DateAdd(dd, DateDiff(dd, 0, theDate), 0)
Tôi đã thấy một đột biến gần đây của "Một truy vấn tốt hơn hai, đáng kinh ngạc?"
SELECT *
FROM blah
WHERE (blah.Name = @name OR @name is null)
AND (blah.Purpose = @Purpose OR @Purpose is null)
Truy vấn này yêu cầu hai hoặc ba kế hoạch thực hiện khác nhau tùy thuộc vào các giá trị của các tham số. Chỉ có một kế hoạch thực hiện được tạo và mắc kẹt vào bộ đệm cho văn bản sql này. Kế hoạch đó sẽ được sử dụng bất kể giá trị của các tham số. Điều này dẫn đến hiệu suất kém liên tục. Sẽ tốt hơn nhiều khi viết hai truy vấn (một truy vấn cho mỗi kế hoạch thực hiện dự định).