溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題

發(fā)布時(shí)間:2021-11-18 13:07:02 來(lái)源:億速云 閱讀:248 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題”這篇文章吧。

問(wèn)題重現(xiàn)

首先我們先創(chuàng)建一張用戶(hù)表test_user,其中USER_ID為了效果我們?cè)O(shè)置為varchar類(lèi)型且加上唯一索引。

CREATE TABLE test_user (
  ID int(11) NOT NULL AUTO_INCREMENT,
  USER_ID varchar(11) DEFAULT NULL COMMENT '用戶(hù)賬號(hào)',
  USER_NAME varchar(255) DEFAULT NULL COMMENT '用戶(hù)名',
  AGE int(5) DEFAULT NULL COMMENT '年齡',
  COMMENT varchar(255) DEFAULT NULL COMMENT '簡(jiǎn)介',
  PRIMARY KEY (ID)
  UNIQUE KEY UNIQUE_USER_ID (USER_ID) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表格數(shù)據(jù)如下(嘻嘻 數(shù)據(jù)依舊使用與上次Mysql的文章MySQL使用UNION連接兩個(gè)查詢(xún)排序失效相同的數(shù)據(jù),但是要注意表結(jié)構(gòu)不同。)

IDUSER_IDUSER_NAMEAGECOMMENT
1111開(kāi)心菜鳥(niǎo)18今天很開(kāi)心
2222悲傷菜鳥(niǎo)21今天很悲傷
3333認(rèn)真菜鳥(niǎo)30今天很認(rèn)真
4444高興菜鳥(niǎo)18今天很高興
5555嚴(yán)肅菜鳥(niǎo)21今天很?chē)?yán)肅

接下來(lái)我們執(zhí)行以下sql

EXPLAIN SELECT * FROM test_user WHERE USER_ID = 111;

發(fā)現(xiàn)給出的解釋結(jié)果如下:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEtest_user
ALL



5
Using where

我們給條件加上引號(hào)后再解釋以下:

EXPLAIN SELECT * FROM test_user WHERE USER_ID = '111';

這時(shí)候我們發(fā)現(xiàn)varchar類(lèi)型的字段在作為字符串查詢(xún)的時(shí)候使用了索引,在以數(shù)值類(lèi)型進(jìn)行查詢(xún)時(shí)是不使用索引的。

問(wèn)題引申

那么問(wèn)題來(lái)了,如果字段是整型的且加上索引,以字符串查詢(xún)時(shí)會(huì)不會(huì)也不走索引呢?實(shí)踐出真知,讓我們?cè)俳又聹y(cè)試一下。

-- 將USER_ID的類(lèi)型修改為整型
CREATE TABLE test_user (
  ID int(11) NOT NULL AUTO_INCREMENT,
  USER_ID int(11) DEFAULT NULL COMMENT '用戶(hù)賬號(hào)',
  USER_NAME varchar(255) DEFAULT NULL COMMENT '用戶(hù)名',
  AGE int(5) DEFAULT NULL COMMENT '年齡',
  COMMENT varchar(255) DEFAULT NULL COMMENT '簡(jiǎn)介',
  PRIMARY KEY (ID),
  UNIQUE KEY UNIQUE_USER_ID (USER_ID) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
EXPLAIN SELECT * FROM test_user WHERE USER_ID = 111;
EXPLAIN SELECT * FROM test_user WHERE USER_ID = '111';

在執(zhí)行了上面兩個(gè)語(yǔ)句后我們發(fā)現(xiàn),int類(lèi)型的字段無(wú)論是以字符串查詢(xún)還是以數(shù)值型查詢(xún)都會(huì)走索引。

以上是“如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI