?目錄
1、批量插入數(shù)據(jù)
1.1 linux環(huán)境下
1.1.1 開啟文件讀取
1.1.2 load數(shù)據(jù)
1.2 windows環(huán)境下
2、order by優(yōu)化
2.1 最左前綴
3、group by
3.1 最左前綴
4、count優(yōu)化
5、or條件優(yōu)化
? 在上一期說到索引的使用,這期來聊一下SQL優(yōu)化,也是平常寫SQL的時(shí)候常用到的。
1、批量插入數(shù)據(jù)
在前幾期也有聊到過批量插入數(shù)據(jù)的方法,例如insert ... select...,select ... into,數(shù)據(jù)量到達(dá)百萬級(jí)時(shí)效率也會(huì)打折扣,此時(shí)可以使用MySQL提供的load指令插入。
1.1 linux環(huán)境下
?1.1.1 開啟文件讀取
首先查看mysql是否開啟了支持讀取本地文件:
show global variables like '%local_infile%';
可以看到ON,說明默認(rèn)開啟了文件讀取。
手動(dòng)開啟:set global local_infile=1;
1.1.2 load數(shù)據(jù)
load data local infile '要加載的文件路徑' into table target_table。
target_table目標(biāo)表結(jié)構(gòu)需要與源文件格式一致。
1.2 windows環(huán)境下
windows下使用load指令加載可能會(huì)出現(xiàn)問題,源文件路徑格式可能會(huì)存在問題,推薦使用可視化工具自帶的導(dǎo)入功能,使用默認(rèn)選項(xiàng)一路點(diǎn)擊“下一步”到結(jié)束。
2、order by優(yōu)化
先來看下當(dāng)前表tb_user索引的情況:
當(dāng)前除了主鍵外沒有任何索引,我們先來驗(yàn)證一下沒有索引的情況:
explain select id,age from tb_user order by age;
explain select id,phone from tb_user order by phone;
可以看到兩條查詢都沒有用到索引。?
Extra:Using filesort:所有不是通過索引返回排序結(jié)果的都叫filesort排序。
2.1 最左前綴
給age和phone添加聯(lián)合索引:
create index idx_age_phone on tb_user(age,phone);
添加了聯(lián)合索引后,只要查詢覆蓋索引且符合最左前綴原則,都不會(huì)回表。
explain select age,phone from tb_user group by age,phone;
3、group by
3.1 最左前綴
使用group by也是要遵守最左前綴原則:
explain select age,phone from tb_user group by age,phone;
4、count優(yōu)化
按照效率排序,count(字段) < count(主鍵 id) < count(1) ≈ count()。
所以盡量使用 count(*)。
5、or條件優(yōu)化
條件之間用到or,則兩個(gè)條件都需要有索引。
explain select age,phone from tb_user where age='31' or phone='17799990023';
推薦閱讀:文章來源:http://www.zghlxwxcb.cn/news/detail-827874.html
? ? MySQL查詢性能優(yōu)化——索引的使用(三)文章來源地址http://www.zghlxwxcb.cn/news/detail-827874.html
到了這里,關(guān)于MySQL查詢性能優(yōu)化——SQL優(yōu)化(四)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!