1. 程式人生 > >由於mysql隱式型別轉換導致的索引失效的問題

由於mysql隱式型別轉換導致的索引失效的問題

今天在測試執行計劃時,發現了以下問題:

mysql 1739 due to type or collation conversion on field

user表:


主鍵userId和userName上分別有主鍵索引和唯一索引。

執行計劃任務:


可以看到會執行全表掃描,並沒有使用索引。

執行命令show warnings:


可以看到,無法使用列userName上的索引,由於在該列上發生了型別轉換。 從表的定義可以看出,這裡mysql隱式的將數值型別轉換成了字串型別,以匹配表。 這也導致的在userName該列上的索引失效,從而導致全表掃描。這是非常可拍的,如果不注意的話,將導致伺服器超負荷。
特此記錄,以警示。
關於mysql中隱式型別轉換詳細看:http://blog.csdn.net/hw_libo/article/details/39252427

相關推薦

MySQL型別轉換導致索引失效

今天發現一個問題,where條件的列上明明有索引,但是執行計劃還是走全表掃描 mysql>  explain select task_id FROM mostop_xiaodai_collection_call_auto WHE

由於mysql型別轉換導致索引失效的問題

今天在測試執行計劃時,發現了以下問題: mysql 1739 due to type or collation conversion on field user表: 主鍵userId和us

Mysql精度損失--型別轉換的坑

    今天在工作中遇到一個小問題,很不起眼的問題,但是很嚴重.就是mysql精度損失.    為什麼我們在進行mysql操作的時候要加引號呢?通常都是字串需要加引號,而數字就不需要加引號,但是這次我在純數字的字串中沒有加引號,所以問題就出現.  

C++:型別轉換和關鍵字explicit

《Inside the C++ Object Model》第二章開篇處有這樣一段話:“事實上關鍵字explicit之所以被匯入這個語言,就是為了給程式設計師提供一種方法,使他們能夠制止“單一引數的constructor”被當做一個conversion運算子”。 conversion運算子即型別

一道有趣的JS題(1 - 妙用型別轉換

題目 輸入:var a = [1,[2,3],a,[b,c]]; 輸出:1,2,3,a,b,c 解決方法3種 1. 使用遞迴 function flat1(arr){ let res = []; if( Array.isArray(arr) ){ arr.for

C++型別轉換 operator

在Win32 SDK, 該API函式原型為 BOOL GetClientRect( HWND hWnd, // 視窗控制代碼 LPRECT lpRect // 客戶區座標 ); 在MFC中,該函式的原型為void

JavaScript中的型別轉換

最近在學習渡一教育的JavaScript精品課,成哥講的還是很棒的,開這個系列記錄下學習筆記 本次學習筆記,對應web前端開發JavaScript精英課js的第六課時   目錄  一.is NaN()  二.++ -- 自增自減運算子 &nb

有趣的JavaScript型別轉換

---恢復內容開始--- 有趣的JavaScript隱式型別轉換 JavaScript的資料型別是非常弱的(不然不會叫它做弱型別語言了)!在使用算術運算子時,運算子兩邊的資料型別可以是任意的,比如,一個字串可以和數字相加。之所以不同的資料型別之間可以做運算,是因為JavaScript引擎在運算之前會悄悄的

Javascript 型別轉換規則

1. Javascript隱式型別轉換與Java的區別 一個Javascript表示式中包含不同型別的值進行運算時,可能會發生隱式型別轉換,也可能不轉換,隱式型別轉換規則與運算元,運算子都相關,這是與強型別語言(Java)不同的地方,Java隱式型別一般只與運算元相關,即表數範圍小的型別向表

Qt——QVariant型別轉換實現型別系統(Type System)

QVariant v(709); qDebug() << v.toInt(); QVariant w("How are you! "); qDebug()

JavaScript面試題大坑之型別轉換例項程式碼

1.1-隱式轉換介紹 在js中,當運算子在運算時,如果兩邊資料不統一,CPU就無法計算,這時我們編譯器會自動將運算子兩邊的資料做一個數據型別轉換,轉成一樣的資料型別再計算 這種無需程式設計師手動轉換,而由編譯器自動轉換的方式就稱為隱式轉換 例如1 > "0"這行程式碼在js中並不會報

C++進階--型別轉換

//############################################################################ /* 隱式型別轉換 * * 型別轉換可分為: * 隱式

15 More Effectic C++ ——條款21/22(過載防止型別轉換/使用複合操作符)

1 看不見的隱式型別轉換 當建構函式只有一個,編譯器會利用建構函式進行隱式型別轉換。如下面所示: class UInt { public: UInt(); UInt(int value); } UInt a = 0, b(0), c = 1; // 隱式轉換:int變成UI

JavaScript強制型別轉換型別轉換

在JavaScript中宣告變數不需指定型別, 對變數賦值也沒有型別檢查,同時JavaScript允許隱式型別轉換。這些特徵說明JavaScript屬於弱型別的語言。 (1).轉換為字串 轉換為字串是應用程式中的常見操作,javascript提供了toStr

C語言進階學習1 型別轉換和強制型別轉換

本部落格記錄狄泰學院課程的學習 學習交流群:320628659 個人QQ:1367087622 歡迎大家交流學習 本章的學習目標: 學習隱式型別轉換和強制型別轉換的基本概念. 本意或非本意下使用型別轉換時可能會出現的問題. 在C語言是可以進行型別之間的轉換且其中存在兩種型別

JavaScript顯型別轉換型別轉換

本文談談JavaScript的型別轉換,我們知道在JavaScript中宣告變數不需指定型別, 對變數賦值也沒有型別檢查,同時JavaScript允許隱式型別轉換。這些特徵說明JavaScript屬於弱型別的語言。 在強型別的C++中,多數情況下建構函式需要宣告為exp

Operator運算子過載與Implicit型別轉換

class Person { public int Age { get; set; } public string Name { get; set; } public static int operator -(Per

C++------型別轉換

隱式型別轉換的定義: “可以用 單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的一個隱式轉換。” 這裡應該注意的是, “可以用單個形參進行呼叫” 並不是指建構函式只能有一個形參,而是它可以有多個形參,但那些形參都是有預設實參的。 那麼,什麼是“隱式轉換”呢? 上面這句話也說了,

{}+[]==0,[]+{}=="[object Object]",!+[]==true (複合語句,型別轉換

這兩天看到一些題目,很是不解,主要是js基礎還沒過關,挑了兩個我認為比較難懂的型別轉換的題目講解一下。 物件型別轉換這個就不詳細說了,網上一大推,無非就是用到兩個函式: Object.toString() Object.valueof() 這裡說一下,Num

ORACLE型別轉換 ORA-01722: 無效數字

在做開時經常會遇到ORA-01722: 無效數字 的錯誤,原因在於自動型別轉換出錯.下面舉個例子: CREATE TABLE t1(NAME VARCHAR(2)); INSERT INTO t1 VALUES('a'); INSERT INTO t1 VALUES('b