SQL常用優化

2021-08-28 16:46:06 字數 2211 閱讀 7528

一、大量匯入資料

alter table tbl_name disable keys;

loading the data

alter table tbl_name enable keys;

disable keys 和 enable keys 用來開啟或者關閉 myisam 表非唯一索引的更新。在匯入大量的資料到乙個非空的 myisam 表時,通過設定這兩個命令,可以提高匯入的效率。對於匯入大量資料到乙個空的 myisam 表,預設就是先導入資料然後才建立索引的,所以不用進行設定。

面是對myisam表進行資料匯入時的優化措施,對於innodb型別的表,這種方式並不

能提高匯入資料的效率,可以有以下幾種方式提高innodb表的匯入效率。

(1)因為 innodb 型別的表是按照主鍵的順序儲存的,所以將匯入的資料按照主鍵的順

序排列,可以有效地提高匯入資料的效率。

(2)在匯入資料前執行 set unique_checks=0,關閉唯一性校驗,在匯入結束後執行

set unique_checks=1,恢復唯一性校驗,可以提高匯入的效率。

(3)如果應用使用自動提交的方式,建議在匯入前執行 set autocommit=0,關閉自

動提交,匯入結束後再執行 set autocommit=1,開啟自動提交,也可以提高匯入的效率。

二、優化insert  語句

當進行資料 insert 的時候,可以考慮採用以下幾種優化方式。

三、優化group  by語句

1、預設情況下,mysql 對所有 group by col1,col2....的字段進行排序。這與在查詢中指定order by col1,col2...類似。因此,如果顯式包括乙個包含相同的列的 order by 子句,則對 mysql 的實際執行效能沒有什麼影響。

如果查詢包括 group by 但使用者想要避免排序結果的消耗,則可以指定 order by null禁止排序。

四、優化order  by  語句

1、mysql 可以使用乙個索引來滿足 order by 子句,而不需要額外的排序。

where 條件和 order by 使用相同的索引,並且 order by 的順序和索引順序相同,並且

order by 的字段都是公升序或者都是降序。

五 、優化巢狀查詢

1、有些情況下,子查詢可以被更有效率的連線(join)替代。連線(join)之所以更有效率一些,是因為 mysql 不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。

六、優化or

1、對於含有 or 的查詢子句,如果要利用索引,則 or 之間的每個條件列都必須用到索引;

如果沒有索引,則應該考慮增加索引。

2、mysql 在處理含有 or字句的查詢時,實際是對 or 的各個字段分別查詢後的結果進行了 union。

七、使用sql 提示語句

1、在查詢語句中表名的後面,新增 use index 來提供希望 mysql 去參考的索引列表,就可以讓 mysql 不再考慮其他可用的索引。

explain select * from sales2 use index (ind_sales2_id) where id = 3\g;

2、 如果使用者只是單純地想讓 mysql 忽略乙個或者多個索引,則可以使用 ignore index 作

為 hint。同樣是上面的例子,這次來看一下查詢過程忽略索引 ind_sales2_id 的情況:

explain select * from sales2 ignore index (ind_sales2_id) where id = 3\g;

3、當使用 force index 進行提示時,即便使用索引的效率不是最高,mysql 還是選擇使用了索引,這是 mysql 留給使用者的乙個自行選擇執行計畫的權力。

explain select * from sales2 force index (ind_sales2_id) where id > 0\g;

常用SQL的優化

limit 1000,20,此時mysql排序出前1020條記錄後僅僅需要返回第1001到1020條記錄,前1000條記錄都會被拋棄,查詢和排序的代價非常高。在索引上完成排序分頁的操作,最後根據主鍵關聯回原表查詢所需要的其他列內容。eg 原 select film id,description fr...

MySQL 常用SQL優化

mysql 常用sql優化 一.大批量插入資料 1.對於load myisam儲存引擎的表,可以通過關閉開啟myisam表非唯一索引的更新來提公升匯入速度 例 mysql alter table tbl name disable keys mysql load data infile home my...

sql常用優化手段

常見優化手段 where及order by的列建索引 避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄。避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,可以在字段上設定預設值0 避免在 where 子句中使用 or 來...