肉眼可以識別的差SQL

xuexiaogang發表於2022-05-13

我自己公眾號原文: https://mp.weixin.qq.com/s/P-hOuC6fWEauGflF0GAgTg

有時候別人問我,你能一眼看出SQL的好壞嗎?我不敢說100%能確定,但是能確定的都是100%的不好。那麼靠的是什麼?根據經驗來說符合下面的規則的,通常來說是不好的。

1、沒有where 條件

2、Select的列超過50列

3、SQL中存在標量子查詢

4、SQL謂詞過濾中僅含有!=或<>或or運算子

5、SQL謂詞過濾中對欄位進行null值判斷作為業務邏輯

6、SQL謂詞過濾中僅含有notin,not exist

7、SQL謂詞過濾中僅含有前後%

8、SQL謂詞過濾中=”左邊進行函式、算術運算或其他表示式運算。

9、SQL謂詞過濾中非唯一查詢的場景中無時間限定或分頁限定。

10、         SQL謂詞過濾中僅有狀態、等區別度較低的欄位

11、         SQL謂詞過濾中時間範圍過大或者缺失上下限之一

12、         SQL謂詞過濾中範圍查詢沒有分頁

13、         SQL謂詞過濾中無意義排序

14、         多表關聯列非索引列

15、         多表關聯,關聯列型別轉換

16、         多表關聯時,select的列只用到其中一個表

17、         多表關聯時,select的列只來自多表,但是大部分表只貢獻1-2列

18、         多表關聯時,謂詞中涉及多表的過濾條件,但是這些條件通常只為狀態等無效過濾條件

19、         關聯表超過5個(MySQL超過3個)

20、         Select沒有繫結變數(Oracle)

21、         繫結變數過多超過50個(Oracle)

22、         對CLOB和BLOB進行模糊查詢

23、         SQL中出現對log表、tmp表,介面表,歷史表進行關聯和判斷

24、         多表關聯笛卡爾積

25、         SQL中出現全形半形,大小寫等判斷

26、         In 超過100個

27、         子查詢超過2個

28、         子查詢和父查詢存在巢狀

29、         拼接欄位作為謂詞充當過濾條件

30、         排序計算count

31、         分組維度超過2個

32、         非時間範圍的分組sum,count


可能存在一點爭議,但是可以說如果都做到禁止以上,那麼資料庫的負荷絕對很低。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2893864/,如需轉載,請註明出處,否則將追究法律責任。

相關文章