婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql優化之like和=性能詳析

mysql優化之like和=性能詳析

熱門標簽:許昌外呼增值業務線路 宜賓全自動外呼系統廠家 咸陽防封電銷卡 地圖標注客戶付款 廣東400企業電話申請流程 石家莊400電話辦理公司 申請400電話電話價格 臨沂做地圖標注 新鄉智能外呼系統好處

引言

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

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

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

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

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

select * from info where id like '12345';

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

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

正文

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

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

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

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

而現在我們把"="換成like試一下:

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

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

type字段

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

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

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

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

Extra字段

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

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

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

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

然而并沒有

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

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

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

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

like:

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

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

結論

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

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

您可能感興趣的文章:
  • mysql中like % %模糊查詢的實現
  • MySQL中LIKE子句相關使用的學習教程
  • MySQL中表復制:create table like 與 create table as select
  • mysql模糊查詢like和regexp小結
  • MySQL中Like概念及用法講解

標簽:阜新 鷹潭 合肥 鎮江 臺灣 貴州 日照 北京

巨人網絡通訊聲明:本文標題《mysql優化之like和=性能詳析》,本文關鍵詞  mysql,優化,之,like,和,性能,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql優化之like和=性能詳析》相關的同類信息!
  • 本頁收集關于mysql優化之like和=性能詳析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 汉中市| 礼泉县| 眉山市| 上饶县| 岳西县| 达州市| 凤翔县| 门头沟区| 天门市| 万年县| 海口市| 义马市| 隆化县| 邢台市| 东乡县| 阿克苏市| 邹城市| 通化县| 新化县| 南丰县| 理塘县| 大连市| 广灵县| 乐陵市| 将乐县| 迭部县| 桃源县| 宜昌市| 济宁市| 台前县| 莲花县| 青川县| 石台县| 西藏| 扶沟县| 仁布县| 荔波县| 温泉县| 泗水县| 安丘市| 秦安县|