mysql 提高mysql語句效率的技巧

2021-09-11 02:27:08 字數 1145 閱讀 9792

一、大批量插入資料

1.大批量資料插入空表,可將表設定成為myisam,並通過disable keys將唯一索引關閉

2.大批量資料插入非空innodb表,可採取如下措施提高效率:

[1]匯入資料時按照主鍵順序排列;

[2]匯入資料前使用set unique_checks=0,關閉唯一性校驗,匯入後恢復;

[3]如果使用了自動提交,建議在匯入前執行set autocommit=0,關閉自動提交,匯入後恢復

二、優化insert語句

1.盡量使用多個值表的insert語句,降低連線、關閉的消耗;

2.將索引檔案和資料檔案分在不同的磁碟上存放;

3.從乙個文字檔案裝入乙個表時,使用load data inflie ,比一般的insert語句快20倍; 

三、查詢優化

1.儘量減少額外的排序,通過索引直接返回有序資料;where條件和order by使用相同的索引,並且order by的順序與索引順序相同,並且order by的字段都是公升序或者都是降序;

2.盡量只選擇必要的字段,提高sql效能;

3.能用關聯查詢的不要用子查詢;

4.對於包含or的查詢語句,如果要利用索引,則or之間的每個條件都必須用到索引,否則應該考慮增加索引;

5.優化分頁

[1]在索引上完成排序分頁的操作,然後根據主鍵關聯回原表查詢所需的其他列

[2]把limit查詢轉換為某個位置的查詢;

四、 注意不使用索引的情況

如果mysql估計使用索引比全表掃瞄更慢,則不使用索引

用or分隔開的條件,如果or前的條件中的列有索引,而後面的列沒有索引,那麼涉及到的索引都不會被用到;

復合索引,如果索引列不是復合索引的第一部分,則不使用索引(即不符合最左字首);

如果like是以』%』開始的,則該列上的索引不會被使用

如果列為字串,則where條件中必須將字元常量值加引號,否則即使該列上存在索引,也不會被使用;

not in 、 not exists 、 (<> 不等於 !=)這些操作符不走索引

不要在 where 子句中的「=」左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引;

mysql通過建立分割槽和索引來提高查詢效率

drop table if exists test create table test id int 10 unsigned not null auto increment,time datetime not null comment 業務時間 primary key id time engine ...

mysql支援語句 mysql語句

delete 刪除資料表中的行 可以刪除某一行,也可以在不刪除資料表的情況下刪除所有行 刪除某一行 delete from 資料表名稱 where 列名稱 值 刪除所有行 delete from 資料表名稱 drop 刪除資料表或資料庫,或刪除資料表字段。刪除資料庫 drop database 資料...

常用mysql語句 常用MySql語句

新建資料表 drop table if exists ga game way create table ga game way id int 11 unsigned not null auto increment comment id primary key id using btree,主鍵 un...