最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年08月31日 08:56:39   作者:張子江  
這篇文章主要給大家介紹了關(guān)于mysql優(yōu)化之like和=性能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

那使用過數(shù)據(jù)庫的人大部分都知道,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)。那好奇的小伙伴可能就要問了,那執(zhí)行過程呢?mysql不管是遇到like還是'='時(shí)的執(zhí)行過程也都是一樣的么?

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

正文

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

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

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

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

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

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

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

type字段

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

type 說明
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)了出來。

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

Extra字段

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

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

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

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

然而并沒有

有的小伙伴該問了那非索引字段呢?

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

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

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

like:

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

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

結(jié)論

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

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

相關(guān)文章

  • mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案

    mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案

    這篇文章主要介紹了mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案,需要的朋友可以參考下
    2021-05-05
  • MySQL分區(qū)之HASH分區(qū)詳解

    MySQL分區(qū)之HASH分區(qū)詳解

    hash分區(qū)的目的是將數(shù)據(jù)按照某列進(jìn)行hash計(jì)算后更加均勻的分散到各個(gè)分區(qū),下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)之HASH分區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • MySQL CPU過高的排查方法

    MySQL CPU過高的排查方法

    這篇文章主要介紹了MySQL CPU過高的排查方法,通過top命令查看服務(wù)器CPU資源使用情況,明確CPU占用率較高的是否是mysqld進(jìn)程,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢

    Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢

    這篇文章主要介紹了Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢,concat函數(shù)在SQL注入查詢中會(huì)有意想不到的作用,本文就起講解它的使用,需要的朋友可以參考下
    2015-04-04
  • MySQL的ORDER BY及優(yōu)化過程詳解

    MySQL的ORDER BY及優(yōu)化過程詳解

    在MySQL中,索引的最左匹配原則是指在使用索引進(jìn)行查詢時(shí),會(huì)優(yōu)先匹配索引的最左側(cè)列,然后再匹配后續(xù)列,本文將基于InnoDB引擎,詳細(xì)分析如何優(yōu)化MySQL索引最左匹配下的ORDER BY語句,需要的朋友可以參考下
    2024-07-07
  • MySQL啟動(dòng)連接的命令以及與PHP程序連接的基本語法

    MySQL啟動(dòng)連接的命令以及與PHP程序連接的基本語法

    這篇文章主要介紹了MySQL啟動(dòng)連接的命令以及與PHP程序連接的基本語法,簡(jiǎn)單講述了PHP中調(diào)用MySQL的方法,需要的朋友可以參考下
    2015-11-11
  • MySQL8.0找不到my.ini如何解決

    MySQL8.0找不到my.ini如何解決

    在配置MySQL主從復(fù)制時(shí),發(fā)現(xiàn)找不到my.ini配置文件,通過檢查路徑和打開隱藏文件夾,最終在C:\ProgramData\MySQL\MySQLServer8.0目錄下找到了my.ini文件
    2025-01-01
  • mysql 連接出現(xiàn)Public Key Retrieval is not allowed的問題解決

    mysql 連接出現(xiàn)Public Key Retrieval is n

    在MySQL連接中出現(xiàn)“Public Key Retrieval is not allowed”錯(cuò)誤,通常是因?yàn)樵谑褂冒踩捉幼謱樱⊿SL)連接時(shí)遇到了問題,本文就來介紹一下解決方法,感興趣的可以了解一下
    2024-03-03
  • MySQL聚簇索引和非聚簇索引的區(qū)別詳情

    MySQL聚簇索引和非聚簇索引的區(qū)別詳情

    這篇文章主要介紹了MySQL聚簇索引和非聚簇索引的區(qū)別詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • 更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題

    更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題

    這篇文章主要介紹了更改MySQL數(shù)據(jù)庫的編碼為utf8mb4問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論

伊川县| 固安县| 湟源县| 自贡市| 正宁县| 香格里拉县| 车险| 大丰市| 大渡口区| 乡城县| 茂名市| 图片| 桃园县| 台南县| 阳山县| 会理县| 营口市| 唐河县| 十堰市| 辉南县| 城市| 江西省| 通榆县| 惠来县| 都兰县| 隆尧县| 夏邑县| 丰镇市| 临桂县| 新宁县| 峨边| 德保县| 宁晋县| 灌云县| 阳西县| 临猗县| 萝北县| 石林| 吴堡县| 永靖县| 新干县|