mysql select稽核

yleizzz發表於2019-10-22

 

·       禁止使用 select * ,只獲取必要欄位

解讀:

1 select * 會增加 cpu/io/ 記憶體 / 頻寬的消耗

2 )指定欄位能有效利用索引覆蓋

3 )指定欄位查詢,在表結構變更時,能保證對應用程式無影響

 

·       insert 必須指定欄位,禁止使用 insert into T values()

解讀:指定欄位插入,在表結構變更時,能保證對應用程式無影響

 

·       隱式型別轉換會使索引失效,導致全表掃描

 

·       禁止在 where 條件列使用函式或者表示式

解讀:導致不能命中索引,全表掃描

 

·       禁止負向查詢以及 % 開頭的模糊查詢

解讀:導致不能命中索引,全表掃描

  以5萬資料為臨界點。。。超過5萬 就不使用like 必須修改

·       禁止大表 JOIN 和儘可能避免子查詢

·       同一個欄位上的 OR 必須改寫問 IN IN 的值必須少於 50

·       應用程式必須捕獲 SQL 異常

解讀:方便定位線上問題,

檢視執行計劃可知子查詢在相同條件下是會比表關聯多一個步驟的

同時會產生一個臨時表。。

關聯查詢的效率 比 子查詢效率更好

·       5.6 之後的mysql關聯表查詢可以使用in 但是禁止使用exist

In 的執行方式已經在5.6及之後的版本優化過了

Exist 還是老的執行方式。禁止使用

 

說明 :本軍規適用於 併發量大,資料量大 的典型 網際網路業務 ,可直接帶走參考,不謝。

 

 


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

相關文章