1. 程式人生 > >SQL優化的思路及基本原則(mysql)

SQL優化的思路及基本原則(mysql)

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,...);