一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

10條SQL優(yōu)化語(yǔ)句,讓你的數(shù)據(jù)庫(kù)跑得更快!

 L羅樂(lè) 2018-03-21
 專(zhuān)欄 秀米 
賀春旸

《MySQL 管理之道》第二版作者


  1. 慢SQL消耗了70%~90%的數(shù)據(jù)庫(kù)CPU資源;

  2. SQL語(yǔ)句獨(dú)立于程序設(shè)計(jì)邏輯,相對(duì)于對(duì)程序源代碼的優(yōu)化,對(duì)SQL語(yǔ)句的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上的代價(jià)都很低;

  3. SQL語(yǔ)句可以有不同的寫(xiě)法;


下面是 賀春旸老師 總結(jié)的一些SQL常見(jiàn)的優(yōu)化方法,每個(gè)案例都簡(jiǎn)單易懂,在開(kāi)發(fā)過(guò)程中可以作為參考:


1
不使用子查詢(xún)

例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');


子查詢(xún)?cè)贛ySQL5.5版本里,內(nèi)部執(zhí)行計(jì)劃器是這樣執(zhí)行的:先查外表再匹配內(nèi)表,而不是先查內(nèi)表t2,當(dāng)外表的數(shù)據(jù)很大時(shí),查詢(xún)速度會(huì)非常慢。

在MariaDB10/MySQL5.6版本里,采用join關(guān)聯(lián)方式對(duì)其進(jìn)行了優(yōu)化,這條SQL會(huì)自動(dòng)轉(zhuǎn)換為
SELECT t1.* FROM t1 JOIN t2 ON t1.id = t2.id;

但請(qǐng)注意的是:優(yōu)化只針對(duì)SELECT有效,對(duì)UPDATE/DELETE子查詢(xún)無(wú)效,固生產(chǎn)環(huán)境應(yīng)避免使用子查詢(xún)

2
避免函數(shù)索引

例:SELECT * FROM t WHERE YEAR(d) >= 2016;
由于MySQL不像Oracle那樣支持函數(shù)索引,即使d字段有索引,也會(huì)直接全表掃描。
應(yīng)改為----->
SELECT * FROM t WHERE d >= '2016-01-01';

3
用IN來(lái)替換OR

低效查詢(xún)
SELECT * FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;
----->
高效查詢(xún)
SELECT * FROM t WHERE LOC_IN IN (10,20,30);

4
LIKE雙百分號(hào)無(wú)法使用到索引

SELECT * FROM t WHERE name LIKE '%de%';
----->
SELECT * FROM t WHERE name LIKE 'de%';
目前只有MySQL5.7支持全文索引(支持中文)

5
讀取適當(dāng)?shù)挠涗汱IMIT M,N

SELECT * FROM t WHERE 1;
----->
SELECT * FROM t WHERE 1 LIMIT 10;

6
避免數(shù)據(jù)類(lèi)型不一致

SELECT * FROM t WHERE id = '19';
----->
SELECT * FROM t WHERE id = 19;

7
分組統(tǒng)計(jì)可以禁止排序

SELECT goods_id,count(*) FROM t GROUP BY goods_id;
默認(rèn)情況下,MySQL對(duì)所有GROUP BY col1,col2...的字段進(jìn)行排序。如果查詢(xún)包括GROUP BY,想要避免排序結(jié)果的消耗,則可以指定ORDER BY NULL禁止排序。
----->
SELECT goods_id,count(*) FROM t GROUP BY goods_id ORDER BY NULL;

8
避免隨機(jī)取記錄

SELECT * FROM t1 WHERE 1=1 ORDER BY RAND() LIMIT 4;
MySQL不支持函數(shù)索引,會(huì)導(dǎo)致全表掃描
----->
SELECT * FROM t1 WHERE id >= CEIL(RAND()*1000) LIMIT 4;       

9
禁止不必要的ORDER BY排序

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;
----->
SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

10
批量INSERT插入

INSERT INTO t (id, name) VALUES(1,'Bea');
INSERT INTO t (id, name) VALUES(2,'Belle');
INSERT INTO t (id, name) VALUES(3,'Bernice');
----->
INSERT INTO t (id, name) VALUES(1,'Bea'), (2,'Belle'),(3,'Bernice');


作者:賀春旸(51CTO博客專(zhuān)家)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    国产成人精品综合久久久看 | 亚洲av专区在线观看| 中文字幕熟女人妻视频| 最近最新中文字幕免费| 成人国产激情在线视频| 欧美精品激情视频一区| 东北老熟妇全程露脸被内射| 高清在线精品一区二区| 日韩免费av一区二区三区| 亚洲妇女黄色三级视频| 日韩国产亚洲一区二区三区| 尹人大香蕉中文在线播放| 亚洲最大福利在线观看| 色婷婷中文字幕在线视频| 亚洲精品一区三区三区| 国产一区在线免费国产一区| 亚洲欧美日韩国产成人| 日韩在线视频精品中文字幕| 日韩黄色一级片免费收看| av在线免费播放一区二区| 日韩精品毛片视频免费看| 成人精品日韩专区在线观看| 精品国产亚洲av久一区二区三区| 国产精品尹人香蕉综合网 | 欧美日韩国产另类一区二区 | 国产综合香蕉五月婷在线| 久久精品久久精品中文字幕| 精品日韩国产高清毛片| 香港国产三级久久精品三级| 国产福利在线播放麻豆| 亚洲精品中文字幕一二三| 九九九热在线免费视频| 日本一区二区三区久久娇喘| 国产成人精品资源在线观看| 国产精品国三级国产专不卡| 空之色水之色在线播放| 午夜国产精品国自产拍av| 日韩成人免费性生活视频| 午夜激情视频一区二区| 日本 一区二区 在线| 日韩欧美综合在线播放|