一個(gè)單引號(hào)引發(fā)的MYSQL性能問(wèn)題分析
剛剛我們說(shuō)過(guò)了,生活中難免會(huì)有一些不如意,比如,我們用一個(gè)字符串類(lèi)型的字段來(lái)作為主鍵,表面上,這太不如意了,然而,事實(shí)也證明這是有用的。問(wèn)題也就出來(lái)了,當(dāng)在查詢語(yǔ)句中對(duì)該字段值加上單引號(hào)和不加查詢耗時(shí)相差百倍!
測(cè)試表:
CREATE TABLE `foo` ( `key` varchar(10) NOT NULL, `time` int(11) NOT NULL, PRIMARY KEY (`key`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后插入30多萬(wàn)條數(shù)據(jù),然后執(zhí)行下面的SQL語(yǔ)句:
SELECT *FROM `foo`WHERE `key` =1293322797
查詢花費(fèi) 0.1288 秒,大約花費(fèi)這么久的時(shí)間,然后,給1293322797加上單引號(hào):
SELECT *FROM `foo`WHERE `key` ='1293322797'
查詢花費(fèi) 0.0009 秒,基本上相差100倍?。?!也就是說(shuō)不加單引號(hào)MYSQL性能損失了100倍,很震撼的比例!
后來(lái)用EXPLAIN分別跑了一下上面兩條語(yǔ)句,見(jiàn)下面兩張圖:
沒(méi)有單引號(hào)時(shí)
有單引號(hào)時(shí)
很明顯,不使用單引號(hào)沒(méi)有用上主索引,并進(jìn)行了全表掃描,使用單引號(hào)就能使用上索引了。
后來(lái)我用大于分別進(jìn)行了測(cè)試,返回的結(jié)果集相同,而他們的耗時(shí)和上面一樣,用EXPLAIN測(cè)試,也和上面一樣
SELECT *FROM `foo`WHERE `key` >1293322797SELECT *FROM `foo`WHERE `key` >'1293322797'
加單引號(hào)和不加單引號(hào)就是這么大的差別!就是會(huì)對(duì)mysql性能產(chǎn)生這么大的影響。
再后來(lái),我將字段`key`換成INT類(lèi)型,這時(shí)候,加不加單引號(hào),就沒(méi)有什么差別了,EXPLAIN顯示他們都同樣能夠用上主索引,只是key_len變短了。
就是這些,綜上所述,我們?cè)趯?xiě)SQL查詢的時(shí)候還是不厭其煩的加上單引號(hào)吧,似乎那沒(méi)有壞處。
相關(guān)文章
MYSQL 完全備份、主從復(fù)制、級(jí)聯(lián)復(fù)制、半同步小結(jié)
這篇文章主要介紹了MYSQL 完全備份、主從復(fù)制、級(jí)聯(lián)復(fù)制、半同步小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)MMM高可用群集架構(gòu)
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)MMM高可用群集架構(gòu),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12MySQL權(quán)限控制和用戶與角色管理實(shí)例分析講解
用戶經(jīng)認(rèn)證后成功登錄數(shù)據(jù)庫(kù),之后服務(wù)器將通過(guò)系統(tǒng)權(quán)限表檢測(cè)用戶發(fā)出的每個(gè)請(qǐng)求操作,判斷用戶是否有足夠的權(quán)限來(lái)實(shí)施該操作,這就是MySQL的權(quán)限控制過(guò)程2022-12-12MySql報(bào)錯(cuò)Table mysql.plugin doesn’t exist的解決方法
一般產(chǎn)生原因是手工更改my.ini的數(shù)據(jù)庫(kù)文件存放地址導(dǎo)致的,大家可以參考下下面的方法2013-02-02MySQL與JDBC之間的SQL預(yù)編譯技術(shù)講解
這篇文章主要介紹了MySQL與JDBC之間的SQL預(yù)編譯技術(shù)講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11