程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL常見sql優化語句

MySQL常見sql優化語句

編輯:MySQL綜合教程


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 的字段都是升序或者都是降序。     作者 bengda

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved