1. 程式人生 > >SQL優化(持續更新)

SQL優化(持續更新)

SELECT子句中避免使用 ‘ * ‘:

ORACLE在解析的過程中, 會將’*’ 依次轉換成所有的列名, 這個工作是通過查詢資料字典完成的, 這意味著將耗費更多的時間

SQL 資料優化之不建立索引的情況

索引可以提高資料的檢索效率,也可以降低資料庫的IO成本,並且索引還可以降低資料庫的排序成本。排序分組操作主要消耗的就是CPU資源和記憶體,所以能夠在排序分組操作中好好的利用索引將會極大地降低CPU資源的消耗

1、較頻繁地作為查詢條件的欄位

這個都知道。什麼是教頻繁呢?分析你執行的所有SQL語句。最好將他們一個個都列出來。然後分析,發現其中有些欄位在大部分的SQL語句查詢時候都會用到,那麼就果斷為他建立索引。

2、唯一性太差的欄位不適合建立索引

什麼是唯一性太差的欄位。如狀態欄位、型別欄位。那些只儲存固定幾個值的欄位,例如使用者登入狀態、訊息的status等。這個涉及到了索引掃描的特性。例如:通過索引查詢鍵值為A和B的某些資料,通過A找到某條相符合的資料,這條資料在X頁上面,然後繼續掃描,又發現符合A的資料出現在了Y頁上面,那麼儲存引擎就會丟棄X頁面的資料,然後儲存Y頁面上的資料,一直到查詢完所有對應A的資料,然後查詢B欄位,發現X頁面上面又有對應B欄位的資料,那麼他就會再次掃描X頁面,等於X頁面就會被掃描2次甚至多次。以此類推,所以同一個資料頁可能會被多次重複的讀取,丟棄,在讀取,這無疑給儲存引擎極大地增加了IO的負擔。

3、更新太頻繁地欄位不適合建立索引

當你為這個欄位建立索引時候,當你再次更新這個欄位資料時,資料庫會自動更新他的索引,所以當這個欄位更新太頻繁地時候那麼就是不斷的更新索引,效能的影響可想而知。大概被檢索幾十次會更新一次的欄位才比較符合建立索引的規範。而如果一個欄位同一個時間段內被更新多次,那麼果斷不能為他建立索引。

4、不會出現在where條件中的欄位不該建立索引