您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wè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)不同。)
ID | USER_ID | USER_NAME | AGE | COMMENT |
---|---|---|---|---|
1 | 111 | 開(kāi)心菜鳥(niǎo) | 18 | 今天很開(kāi)心 |
2 | 222 | 悲傷菜鳥(niǎo) | 21 | 今天很悲傷 |
3 | 333 | 認(rèn)真菜鳥(niǎo) | 30 | 今天很認(rèn)真 |
4 | 444 | 高興菜鳥(niǎo) | 18 | 今天很高興 |
5 | 555 | 嚴(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é)果如下:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | test_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)題來(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è)資訊頻道!
免責(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)容。