前言:很多時候乙個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...