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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM