您好,登錄后才能下訂單哦!
SQL SERVER出現cross the line怎么辦,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
SQL SERVER 在數據庫的里面一直是以“綿羊”的身份出現,不如 ORACLE 的尊貴,也不如POSTGRESQL 的 犀利, 更沒有MYSQL 的人氣。但很多人的第一個開蒙的數據庫就是SQL SERVER。SQL SERVER 的使用的面積是很廣的,但這么好脾氣的數據庫,你若 cross the line, 那就休怪他 給你“趴窩”。
我們來看看下面的一個例子然后在講講,是怎么得罪了這個“小綿羊”
首先這個表,的表結構我們就不去關心了,主要的就是id 是主鍵
那我們的上面那個圖的查詢計劃是很正常的,走主鍵。
到底是為什么一個簡簡單單的主鍵查詢會搞成全表掃描,問題的關鍵就是
Implicit conversion in SQL Server
(表沒有什么特別,就是用char作為主鍵)
下面我們就好好說說,這個隱士轉換的問題, 首先明確的一個問題,隱士轉換存在兩個地方
1 給定的值沒有類型, 你要SQL SERVER 給你猜, 然后猜錯了
2 給定了類型,但不對,不是你對應表的字段類型,屬于 X唇不對X嘴的情況
這兩種情況最后的結果,繼續用上面的例子,就是好好的 = 變成了 > < 的操作
而反觀正常的方式
當然問題已經說的很清楚了,解決也很簡單,如果要在挖一下,SQL SERVER 的隱士轉換也是有順序的,下面就是順序,1 用戶定義,你的定義是第一位的,然后就開始以此類推的進行 “猜猜看” 的好戲了。
下面是一張表,這張表可以將類型(或者猜猜看),FROM TO 地來一個明確的表格化SHOW。
當然如果現在出現一個聲音說,他們寫的程序我怎么知道有沒有隱士轉換,或者一大堆的存儲過程,我怎么知道隱士轉換,那有沒有方法揪出這些“害人精”。當然有辦法,直接打開你的 extent event 的 plan_affecting_convert ,就能打開照妖鏡,將他們一個個的抓出來。
所以我們在操作數據庫的時候,無論是對應的字段是什么類型,你定義的,聲明的,或者程序里面的,都最好和他“符合” ,否則 “小綿羊” 犄角的滋味也不大好受。
關于SQL SERVER出現cross the line怎么辦問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。