您好,登錄后才能下訂單哦!
本篇內容介紹了“MySQL常見的sql優化語句”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
大批量插入數據
1. 對于Myisam 類型的表,可以通過以下方式快速的導入大量的數據。
ALTER TABLE tblname DISABLE KEYS;
loading the data
ALTER TABLE tblname ENABLE KEYS;
這兩個命令用來打開或者關閉Myisam 表非唯一索引的更新。在導入大量的數據到一個非空的Myisam 表時,通過設置這兩個命令,可以提高導入的效率。對于導入大量數據到一個空的Myisam 表,默認就是先導入數據然后才創建索引的,所以不用進行設置。
2. 而對于Innodb 類型的表,這種方式并不能提高導入數據的效率。對于Innodb 類型的表,我們有以下幾種方式可以提高導入的效率: www.2cto.com
a. 因為Innodb 類型的表是按照主鍵的順序保存的,所以將導入的數據按照主鍵的順序排列,可以有效的提高導入數據的效率。如果Innodb 表沒有主鍵,那么系統會默認創建一個內部列作為主鍵,所以如果可以給表創建一個主鍵,將可以利用這個優勢提高導入數據的效率。
b. 在導入數據前執行SET UNIQUE_CHECKS=0,關閉唯一性校驗,在導入結束后執行SETUNIQUE_CHECKS=1,恢復唯一性校驗,可以提高導入的效率。
c. 如果應用使用自動提交的方式,建議在導入前執行SET AUTOCOMMIT=0,關閉自動提交,導入結束后再執行SET AUTOCOMMIT=1,打開自動提交,也可以提高導入的效率。
優化insert語句
如果你同時從同一客戶插入很多行,使用多個值表的INSERT 語句。這比使用分開 INSERT 語句快(在一些情況中幾倍)。Insert into test values(1,2),(1,3),(1,4)…
如果你從不同客戶插入很多行,能通過使用INSERT DELAYED 語句得到更高的速度。Delayed 的含義是讓insert 語句馬上執行,其實數據都被放在內存的隊列中,并沒有真正的寫入磁盤;這比每條語句都分別插入要快的多;LOW_PRIORITY剛好相反,在所有其他用戶對表的讀寫完成后才進行插入。
將索引文件和數據文件分在不同的磁盤上存放(利用建表中的選項);
如果進行批量插入,可以增加bulk_insert_buffer_size 變量值的方法來提高速度,但是,這只能對myisam表使用; www.2cto.com
當從一個文本文件裝載一個表時,使用LOAD DATA INFILE。這通常比使用很多INSERT語句快20倍;
根據應用情況使用replace 語句代替insert;
根據應用情況使用ignore 關鍵字忽略重復記錄。
優化Group By語句
默認情況下,MySQL 排序所有GROUP BY col1,col2,....。查詢的方法如同在查詢中指定ORDER BY col1,col2,...。如果顯式包括一個包含相同的列的ORDER BY子句,MySQL 可以毫不減速地對它進行優化,盡管仍然進行排序。如果查詢包括GROUP BY 但你想要避免排序結果的消耗,你可以指定ORDER BY NULL禁止排序。
優化Order by語句
在某些情況中,MySQL 可以使用一個索引來滿足ORDER BY 子句,而不需要額外的排序。where 條件和order by 使用相同的索引,并且order by 的順序和索引順序相同,并且order by 的字段都是升序或者都是降序。
“MySQL常見的sql優化語句”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。