欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

那使用過數(shù)據(jù)庫的人大部分都知道,like和=號在功能上的相同點和不同點,那我在這里簡單的總結下:

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

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

2,相同點:like和"="都可以進行精確查詢,

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

select * from info where id like '12345';

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

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

正文

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

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

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

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

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

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

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

type字段

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

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

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

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

Extra字段

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

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

顯然通過以上的總結我們可以得出結論:當我們使用索引字段進行條件查詢時,'='的性能要比like快。

是不是以為到這里就結束了呢?

然而并沒有

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

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

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

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

like:

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

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

結論

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

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

相關文章

  • MySQL最大連接數(shù)限制的修改步驟

    MySQL最大連接數(shù)限制的修改步驟

    針對一些訪問量比較大的網(wǎng)站,Mysql默認的最大連接數(shù)可能不夠用,需要進行相應的修改,下面這篇文章主要給大家介紹了關于MySQL最大連接數(shù)限制的修改步驟,需要的朋友可以參考下
    2022-07-07
  • 開啟bin-log日志mysql報錯的解決方法

    開啟bin-log日志mysql報錯的解決方法

    開啟bin-log日志mysql報錯:This function has none of DETERMINISTIC, NO SQL解決辦法,大家參考使用吧
    2013-12-12
  • mysql中l(wèi)ike % %模糊查詢的實現(xiàn)

    mysql中l(wèi)ike % %模糊查詢的實現(xiàn)

    這篇文章主要介紹了mysql中l(wèi)ike % %模糊查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • phpstudy安裝后mysql無法啟動的解決

    phpstudy安裝后mysql無法啟動的解決

    本文主要介紹了phpstudy安裝后mysql無法啟動的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • MySQL數(shù)據(jù)庫之字符集?character

    MySQL數(shù)據(jù)庫之字符集?character

    這篇文章主要介紹了MySQL數(shù)據(jù)庫之字符集?character,文章基于MySQL的的相關資料展開詳細介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-05-05
  • MySQL之終端Terminal(dos界面)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作

    MySQL之終端Terminal(dos界面)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作

    這篇文章主要介紹了MySQL之終端(Terminal)管理數(shù)據(jù)庫、數(shù)據(jù)表、數(shù)據(jù)的基本操作,需要的朋友可以參考下
    2015-03-03
  • mysql更新一個表里的字段等于另一個表某字段的值實例

    mysql更新一個表里的字段等于另一個表某字段的值實例

    下面小編就為大家?guī)硪黄猰ysql更新一個表里的字段等于另一個表某字段的值實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 關于MySQL中Update使用方法舉例

    關于MySQL中Update使用方法舉例

    這篇文章主要給大家介紹了關于MySQL中Update使用方法的相關資料,更新數(shù)據(jù)是使用數(shù)據(jù)庫時最重要的任務之一,在本教程中您將學習如何使用MySQL UPDATE語句來更新表中的數(shù)據(jù),需要的朋友可以參考下
    2023-11-11
  • SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)

    SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)

    經(jīng)常在分組查詢之后,需要的是分組的某行數(shù)據(jù),例如更新時間最新的一條數(shù)據(jù),下面這篇文章主要給大家介紹了關于SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)的相關資料,需要的朋友可以參考下
    2022-10-10
  • Mysql??DATEDIFF函數(shù)用法總結示例詳解

    Mysql??DATEDIFF函數(shù)用法總結示例詳解

    MySQL DATEDIFF()函數(shù)是MySQL中常見的日期函數(shù)之一,它主要用于計算兩個日期之間的差值,單位可以是天、周、月、季度和年,DATEDIFF函數(shù)用于返回兩個日期的天數(shù),這篇文章主要介紹了Mysql??DATEDIFF函數(shù),包括語法格式和示例代碼講解,需要的朋友可以參考下
    2023-03-03

最新評論