十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本文主要給大家簡單講講MySQL如何實現(xiàn)隱式轉(zhuǎn)換,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望mysql如何實現(xiàn)隱式轉(zhuǎn)換這篇文章可以給大家?guī)硪恍嶋H幫助。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供鄒城網(wǎng)站建設(shè)、鄒城做網(wǎng)站、鄒城網(wǎng)站設(shè)計、鄒城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、鄒城企業(yè)網(wǎng)站模板建站服務(wù),10年鄒城做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
我們看上圖,yhtest 表,第三列為c、varchar 類型,表中4行數(shù)據(jù),當(dāng)我們使用select * from yhtest where c=0; 進行查詢的時候,有三個warning!
今天我們就從這三個warning 說起,后面的大部分內(nèi)容可以解釋為啥會有這三個warnings!
轉(zhuǎn)換原則:當(dāng)我們在使用where條件查詢的時候,字段類型和賦值類型不一致時,都將轉(zhuǎn)換成整型! 這樣一個描述其實是比較模糊的,下面我們具體來看。上圖中字段類型為varchar 字符串類型,但是查詢條件為c=0 ×××,需要將字段內(nèi)容都轉(zhuǎn)換為整型,轉(zhuǎn)換方式為:
1)純字符串內(nèi)容,則直接轉(zhuǎn)換為0 ‘a(chǎn)bc’ 將直接被轉(zhuǎn)換為0
2)含有以數(shù)字開頭的字符串 ,則會進行截取處理,截取至不是數(shù)字的字符串為止,比如‘4abc’ 將 轉(zhuǎn)換為4 ,‘04abc’ 被轉(zhuǎn)換為‘04’ 但是這個在匹配c=4的時候,是會被匹配到的
3)如果是純數(shù)字字符串,那么將直接轉(zhuǎn)換為對應(yīng)的×××,比如‘4’ 將直接轉(zhuǎn)換為4
4)以字符開頭,數(shù)字結(jié)尾的,還是將轉(zhuǎn)換為0
這樣我們再看開頭所報出的warnings ,頓時覺得合理了
很多sql優(yōu)化的文章中強調(diào):字符串一定記得在where條件中加引號,原因也正是在這里,下面我們看例子
執(zhí)行 select from yhtest where c=4 的結(jié)果和執(zhí)行計劃如下:
執(zhí)行select from yhtest where c='4' 結(jié)果和執(zhí)行計劃如下:
通過執(zhí)行計劃我們看到,第一種where條件后面字段類型 和賦值類型不一致,隱式轉(zhuǎn)換,也沒有用到c列上的索引。第二種不存在隱式轉(zhuǎn)換,使用了c列的索引,二者的查詢結(jié)果也不一樣!
上述隱式轉(zhuǎn)換,大部分時候,我們需要用來避免隱式轉(zhuǎn)換帶來的不走索引,全表掃描,帶來的sql性能問題,但是在數(shù)據(jù)少的時候,我們可以用來做一些特別操作,比如讓'abcdefg'=0?
mysql如何實現(xiàn)隱式轉(zhuǎn)換就先給大家講到這里,對于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。