MySQL資料庫SQL優化方法總結

2021-10-05 22:12:35 字數 1772 閱讀 7751

前言:很多時候乙個web應用的快慢主要取決於三個方面:資料庫執行,後端**處理,前端頁面展示。這裡主要說一下資料庫執行的優化

說到資料庫的優化那肯定需要滿足兩點:

①正確且有效的sql

②合理的索引

乙個糟糕的查詢,用時可能會花費好幾秒甚至更多,對於乙個優秀的應用來講這是絕不允許得。無論從優化成本和優化效果上來看,sql層面的優化都是最優的選擇。

要了解為什麼索引能優化查詢就要了解什麼是索引?

索引的本質有人說是一種特殊的表,索引列關鍵字與資料實際存放的物理位址對映。在我看來,即使是特殊的表它也是一種資料演算法,最終結合資料結構對需要的資料進行快速定位,所以在表資料比較龐大時再新增索引會執行的更久,就是因為資料庫在對索引列進行演算法計算,也是因為演算法同樣會消耗時間,在建立索引時也不是越多越好,過多的索引在表資料增改時會增加執行時間(索引是演算法,所以新增時需要計算索引的位置,這裡需要消耗時間)。

mysql 優化要點

1、表的主鍵、外來鍵必須有索引;

2、通常資料量超過500的表應該有索引;

3、經常與其他表進行連線的表,在連線欄位上應該建立索引

4、經常出現在where、group by 、order by子句中的字段,特別是大表的字段,應該建立索引;

5、索引應該建在選擇性高的字段上(如果乙個字段只有「男,女」,「0,1」等值就沒必要建索引);

6、索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引;

7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:

8、頻繁進行資料操作的表,不要建立太多的索引;

9、刪除無用的索引,避免對執行計畫造成負面影響;

10、使用查詢語句 where 條件時,不允許出現 函式,否則索引會失效;

11、使用單錶查詢時,相同字段盡量不要用 or,因為可能導致索引失效,比如:select * from table where name = '小明' or name = '小李',可以使用 union 替代;

12、like 語句不允許使用 % 開頭,否則索引會失效;

13、組合索引一定要遵循 從左到右 原則,否則索引會失效;比如:select * from table where name = '張三' and age = 18,那麼該組合索引必須是 name,age 形式;

14、每張表都必須有 主鍵,達到加快查詢效率的目的;

一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。

因為太多的索引與不充分、不正確的索引對效能都毫無益處:在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大。

提高資料庫效能的其他方案:

1.資料庫設計滿足3nf要求;

2.新增索引(主鍵索引、唯一索引、普通索引、全文索引);

3.表的切分(水平分割和垂直分割);

4.讀寫分離

推薦文章:

mysql資料庫sql優化

sql優化 本文件描述了mysql資料庫的sql優化,從整體上描述mysql資料庫的sql執行過程,及整個流程上相關優化點,重點描述innodb儲存引擎的索引優化及鎖機制,旨在為讀者提供在mysql上做sql優化的思路,達到授人以漁的效果,希望能為讀者帶來收穫。效能 完成某項任務所需要的時間度量,即...

MySQL資料庫SQL優化(原則)

通過web應用關係圖譜可以看出web應用的響應速度取決於多個方面 優化方法 1 改變 sql 執行計畫 明確了優化目標之後,我們需要確定達到我們目標的方法。對於 sql 語句來說,達到上述2個目標的方法其實只有乙個,那就是改變 sql 的執行計畫,讓他盡量 少走彎路 盡量通過各種 捷徑 來找到我們需...

mysql資料庫sql語句優化

昨天幫同事優化了乙個sql語句發出來共勉下 select t.select s.codename from sys codelist s where s.codevalue t.packagingtype and s.kindcode packaging as packagingtypename,s...