SQL優化的思路及基本原則(mysql)
阿新 • • 發佈:2019-01-06
SQL優化的思路:
1.優化更需要優化的sql;
2.定位優化物件的效能瓶頸:優化前需瞭解查詢的瓶頸是IO還是CPU,可通過PROFILING很容易定位查詢的瓶頸。
3.明確優化目標;
4.從Explain入手;
5.多使用profile;
SQL優化的基本原則: 1.永遠用小結果集驅動大結果集; From子句中sql解析順序為從右向左,執行時會以最左邊的表為基礎表迴圈與右邊表資料做笛卡爾積,所以以小結果集驅動能減少迴圈次數,從而減少對被驅動結果集的訪問,從而減少被驅動表的鎖定。 2.儘可能在索引中完成排序; 排序演算法有兩種:a.查出排序欄位和行指標,排序,再通過行指標獲得行資料所需列,返回結果集;b.取出所有排序列資料,在排序緩衝區中排完序直接返回結果集。
索引排序是利用索引的有序性對資料排序的。
3.只取出子集需要的colums
4.僅僅使用最有效的過濾條件;
5.儘可能避免複雜的Join和子查詢;
索引的好處:
(1).提高資料檢索效率,降低資料庫的IO成本。
(2).降低資料排序成本:要求排序欄位和索引鍵欄位一致。
(3).降低資料分組成本:因為分組之前會先排序,同意如果分組欄位與索引欄位一致,會降低分組消耗的成本。
索引的弊端:
(1).索引是獨立於基礎資料的資料庫物件,因此它會佔用儲存空間。
(2).資料新增、更新會導致索引的同步更新,所以會增加資料新增、更新所消耗的成本。
判斷是否需要建立索引:
(1).較為頻繁的作為查詢條件的欄位需要建立索引;
(2). 唯一性太差的欄位不適合單獨建立索引,即使頻繁作為查詢條件;
(3).更新非常頻繁的欄位不適合建立索引;
(4).不會出現在where子句中的欄位不要建立索引;
索引語法:
(1).唯一索引
ALTER TABLE tableName ADD UNIQUE indexName (column);
CREATE UNIQUE INDEX indexName ON tableName (column);
(2).普通索引
ALTER TABLE tableName ADD INDEX indexName(column);
CREATE INDEX indexName ON tableName(column);
(3).主鍵索引
ALTER TABLE tableName ADD PRIMARY KEY (column);
(4).全文索引
ALTER TABLE tableName ADD FULLTEXT (column);
(5).組合索引
ALTER TABLE tableName ADD INDEX indexName(col1,col2,...);
SQL優化的基本原則: 1.永遠用小結果集驅動大結果集; From子句中sql解析順序為從右向左,執行時會以最左邊的表為基礎表迴圈與右邊表資料做笛卡爾積,所以以小結果集驅動能減少迴圈次數,從而減少對被驅動結果集的訪問,從而減少被驅動表的鎖定。 2.儘可能在索引中完成排序; 排序演算法有兩種:a.查出排序欄位和行指標,排序,再通過行指標獲得行資料所需列,返回結果集;b.取出所有排序列資料,在排序緩衝區中排完序直接返回結果集。