您好,登錄后才能下訂單哦!
本文主要給大家簡單講講mysql如何實現隱式轉換,相關專業術語大家可以上網查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望mysql如何實現隱式轉換這篇文章可以給大家帶來一些實際幫助。
我們看上圖,yhtest 表,第三列為c、varchar 類型,表中4行數據,當我們使用select * from yhtest where c=0; 進行查詢的時候,有三個warning!
今天我們就從這三個warning 說起,后面的大部分內容可以解釋為啥會有這三個warnings!
轉換原則:當我們在使用where條件查詢的時候,字段類型和賦值類型不一致時,都將轉換成整型! 這樣一個描述其實是比較模糊的,下面我們具體來看。上圖中字段類型為varchar 字符串類型,但是查詢條件為c=0 ×××,需要將字段內容都轉換為整型,轉換方式為:
1)純字符串內容,則直接轉換為0 ‘abc’ 將直接被轉換為0
2)含有以數字開頭的字符串 ,則會進行截取處理,截取至不是數字的字符串為止,比如‘4abc’ 將 轉換為4 ,‘04abc’ 被轉換為‘04’ 但是這個在匹配c=4的時候,是會被匹配到的
3)如果是純數字字符串,那么將直接轉換為對應的×××,比如‘4’ 將直接轉換為4
4)以字符開頭,數字結尾的,還是將轉換為0
這樣我們再看開頭所報出的warnings ,頓時覺得合理了
很多sql優化的文章中強調:字符串一定記得在where條件中加引號,原因也正是在這里,下面我們看例子
執行 select from yhtest where c=4 的結果和執行計劃如下:
執行select from yhtest where c='4' 結果和執行計劃如下:
通過執行計劃我們看到,第一種where條件后面字段類型 和賦值類型不一致,隱式轉換,也沒有用到c列上的索引。第二種不存在隱式轉換,使用了c列的索引,二者的查詢結果也不一樣!
上述隱式轉換,大部分時候,我們需要用來避免隱式轉換帶來的不走索引,全表掃描,帶來的sql性能問題,但是在數據少的時候,我們可以用來做一些特別操作,比如讓'abcdefg'=0?
mysql如何實現隱式轉換就先給大家講到這里,對于其它相關問題大家想要了解的可以持續關注我們的行業資訊。我們的板塊內容每天都會捕捉一些行業新聞及專業知識分享給大家的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。