久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

mysql優(yōu)化之like和=性能詳析

瀏覽:7日期:2023-10-12 10:05:44

引言

那使用過(guò)數(shù)據(jù)庫(kù)的人大部分都知道,like和=號(hào)在功能上的相同點(diǎn)和不同點(diǎn),那我在這里簡(jiǎn)單的總結(jié)下:

1,不同點(diǎn):like可以用作模糊查詢,而’=’不支持此功能;如下面的例子,查詢info表中字段id第一個(gè)字母為1的數(shù)據(jù):

select * from info where id like ’1%’;

2,相同點(diǎn):like和'='都可以進(jìn)行精確查詢,

比如下面的例子,從結(jié)果上看,都是查詢info表中字段id等于’12345’的結(jié)果:

select * from info where id like ’12345’;

以上就是返回結(jié)果中,like和’=’中的相同和不同點(diǎn)。那好奇的小伙伴可能就要問(wèn)了,那執(zhí)行過(guò)程呢?mysql不管是遇到like還是’=’時(shí)的執(zhí)行過(guò)程也都是一樣的么?

沒(méi)錯(cuò),事情不能只看表面,如果你細(xì)心研究,就會(huì)發(fā)現(xiàn)其實(shí)like和等于號(hào)’=’并不是那么簡(jiǎn)單,下面我們將詳細(xì)的分析他們兩者的真正區(qū)別~~~

正文

首先,我們來(lái)介紹一下mysql中的explain關(guān)鍵字;explain是執(zhí)行計(jì)劃的意思,即通過(guò)該命令查看這條sql是如何執(zhí)行的。使用方法也很簡(jiǎn)單,即explain + sql語(yǔ)句,例如:

explain select * from info where id like ’12345’;

那我們來(lái)使用explain測(cè)試一下like和=下的查詢情況,首先我們來(lái)測(cè)試一下為索引的字段:

EXPLAIN SELECT * FROM crms_customer WHERE id = ’7cf79d7c8a3a4f94b5373b3ec392e32d’;

mysql優(yōu)化之like和=性能詳析

而現(xiàn)在我們把'='換成like試一下:

EXPLAIN SELECT * FROM crms_customer WHERE id LIKE ’7cf79d7c8a3a4f94b5373b3ec392e32d’;

mysql優(yōu)化之like和=性能詳析

小伙伴通過(guò)對(duì)比可以看到兩條返回結(jié)果的type字段和Extra字段中的數(shù)據(jù)有所不同,那為什么不同,他們所代表的含義是什么呢?

type字段

type字段是一個(gè)可選值,這些值的性能從低到高的排序如下:

type 說(shuō)明 SYSTEM 系統(tǒng),表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類型的一個(gè)特例 CONST 常量,表最多有一個(gè)匹配行,因?yàn)閮H有一行,在這行的列值可被優(yōu)化器剩余部分認(rèn)為是常數(shù),const表很快,因?yàn)樗鼈冎蛔x取一次 EQ_REF 搜索時(shí)使用primary key 或 unique類型 REF 根據(jù)索引查找一個(gè)或多個(gè)值 INDEX_MERGE 合并索引,使用多個(gè)單列索引搜索 RANGE 對(duì)索引列進(jìn)行范圍查找 index 全索引表掃描 ALL 全數(shù)據(jù)表掃描

根據(jù)表格可以明顯看出,其中const是常量查找,而RANGE是對(duì)索引列進(jìn)行范圍查找,所以性能也就很明顯的體現(xiàn)了出來(lái)。

那使用like查詢時(shí),Extra字段代表什么呢?Extra字段中的Using where,又代表什么?

Extra字段

1,Extra字段是Explain輸出中也很重要的列,所代表著MySQL查詢優(yōu)化器執(zhí)行查詢的過(guò)程中對(duì)查詢計(jì)劃的重要補(bǔ)充信息。

2,Extra字段中的Using where意味著mysql服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過(guò)濾。所以比起使用使用’=’又多了一步查找過(guò)程。

顯然通過(guò)以上的總結(jié)我們可以得出結(jié)論:當(dāng)我們使用索引字段進(jìn)行條件查詢時(shí),’=’的性能要比like快。

是不是以為到這里就結(jié)束了呢?

然而并沒(méi)有

有的小伙伴該問(wèn)了那非索引字段呢?

對(duì)的,我們下面繼續(xù)測(cè)試非索引字段

EXPLAIN SELECT * FROM crms_customer WHERE customer_name = ’張飛’;----------------------------------- EXPLAIN SELECT * FROM crms_customer WHERE customer_name LIKE ’張飛’;

除了'='和like同樣的兩條語(yǔ)句,讓我們運(yùn)行一下:'=':

mysql優(yōu)化之like和=性能詳析

like:

mysql優(yōu)化之like和=性能詳析

可以看出當(dāng)非索引字段時(shí)like和'='是一樣的,性能上也沒(méi)有差別。

(當(dāng)然,explain中還有很多其他字段,后續(xù)我會(huì)一一給小伙伴們講解的。)

結(jié)論

經(jīng)過(guò)我們的不懈努力,可以得到結(jié)論:當(dāng)like和'='在使用非索引字段查詢時(shí),他們的性能是一樣的;而在使用索引字段時(shí),由于'='是直接命中索引的,只讀取一次,而like需要進(jìn)行范圍查詢,所以'='要比like性能好一些。~~~~

到此這篇關(guān)于mysql優(yōu)化之like和=性能的文章就介紹到這了,更多相關(guān)mysql like和=性能內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 国产欧美精品一区aⅴ影院 毛片视频网站 | 在线色网站 | 在线观看亚洲一区 | 高清视频一区二区三区 | 久久久香蕉 | 国产精品国产精品国产专区不蜜 | 亚洲男人天堂av | 天天色天天射天天操 | 日韩中文视频 | 国产日韩欧美视频 | 亚洲一区二区av | 一区二区视频免费 | 国产精品免费一区二区 | 成人二区| 日韩欧美国产精品 | 婷婷色视频| 一级片免费在线视频 | 成人午夜在线 | 国产高清视频 | 久久精品欧美一区二区三区不卡 | 一区二区三区在线不卡 | 亚洲在线电影 | 国产在线观看二区 | 久久久一区二区三区 | 国产一级毛片国语一级 | 男人的天堂一级片 | 毛片毛片毛片毛片 | 综合网视频 | 国产9色在线 | 日韩 | 久久久久国产精品 | 国产一区视频在线 | 国产成人av综合 | 亚洲二区在线播放 | 亚洲国产成人在线 | 国产精品网站在线观看 | 黄色电影天堂 | 欧美综合网 | 成人欧美一区二区三区在线播放 | 成人av免费看 | 特a级片 | 国产精品久久久久久久天堂 |