MySQL索引失效的幾種場景
我們都知道建立索引能夠提高查詢效率,那麼是不是任何情況下都能提高呢,當然不是的的,下面我們就來列舉一些常見的索引失效的場景。
借用上一篇文章的dm_person_info表
在card_code列沒加索引的時,查詢時間如下,大概都在0.07秒。
我們來加上索引試試,加上後查詢效率高了許多。
在正確使用索引的情況下,查詢一行資料的時間不到10毫秒,所以顯示0.00 sec .
1.列型別是字串,查詢條件未加引號。
card_code列是身份證號,資料型別是varchar,在沒有將證件號碼用引號括起時不會使用索引,此時索引失效。
2.未使用該列作為查詢條件
索引建在card_code列上,使用tel列作為查詢條件,此時該索引未被使用到,也可以說是失效的。
3.使用like時萬用字元在前
我們可以看到萬用字元在後面時效率不受影響,說明此時索引未失效,萬用字元在前時索引失效。
4. 在查詢條件中使用OR
查詢條件中使用or會使索引失效,要想是索引生效,需要將or中的每個列都加上索引。
5.對索引列進行函式運算
6.聯合索引ABC問題
Mysql從左到右的使用索引中的欄位,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是index (a,b,c),可以支援a | a,b| a,b,c 3種組合進行查詢,但不支援 b,c或c進行查詢 。
這裡只介紹6種比較常見的失效場景,實際上還有很多,我們在實際開發中要注意到這些問題,不能掉到坑裡去了,哈哈^_^ 。
相關推薦
MySQL索引失效的幾種場景
我們都知道建立索引能夠提高查詢效率,那麼是不是任何情況下都能提高呢,當然不是的的,下面我們就來列舉一些常見的索引失效的場景。 借用上一篇文章的dm_person_info表 在card_code列沒加索引的時,查詢時間如下,大概都在0.07秒。 我們來加
MySQL索引失效的幾種情況
模糊 運算 全表掃描 mysq 子節點 葉子節點 數據 都是 記錄 1.索引不存儲null值 更準確的說,單列索引不存儲null值,復合索引不存儲全為null的值。索引不能存儲Null,所以對這列采用is null條件時,因為索引上根本 沒Null值,不能利用到索引,只能全
mysql索引失效的幾種情況(總結)
10)隱式轉換導致索引失效.這一點應當引起重視.也是開發中經常會犯的錯誤. 由於表的欄位tu_mdn定義為varchar2(20),但在查詢時把該欄位作為number型別以where條件傳給Oracle,這樣會導致索引失效. 錯誤的例子:select * from test where tu_mdn=1333
mysql 索引失效的幾種原因
索引並不是時時都會生效的,比如以下幾種情況,將導致索引失效: 1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼儘量少用or的原因) 注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引 2.對於多列索引,不是使
Mysql支援哪幾種索引
Mysql支援哪幾種索引 從資料結構角度 1、B+樹索引(O(log(n))):關於B+樹索引,可以參考 MySQL索引背後的資料結構及演算法原理 2、hash索引: a 僅僅能滿足"=",“IN"和”<=>"查詢,不能使用範圍查詢 b 其檢索效率非常高,索引的檢索可
Element 表單 resetFields() 驗證失效 幾種不同的場景(圖示)
需求:當然是清除表單驗證(即下方紅色警告) 解決:這4種寫法絕對可以解決問題了。 A:_this.$refs['formName'].resetFields(); B:if (_this.$refs['formName'] != undefined){_this
2、MySQL 索引失效的場景
索引失效的場景: 1、沒有 where 條件 直接看 SQL 語句 2、where 條件中所在的列沒有建立索引 show index from t; 3、從表中取得資料超過某個閾值。通常認為是 20~30%,即使 wher
MySQL索引失效的場景
原因 where sql 提取 很好 exp 第一個字符 join abc WHERE字句的查詢條件裏有不等於號(WHERE column!=…),MYSQL將無法使用索引 類似地,如果WHERE字句的查詢條件裏使用了函數(如:WHERE DAY(column)=…),M
索引的幾種掃描方式
http table 技術分享 -1 9.png alt logs image 索引 索引的幾種掃描方式
索引的幾種使用方式
查找 浪費 相對 掃描 遇到 l數據庫 系統 需求 mem HASH Hash這個詞,可以說,自打我們開始碼的那一天起,就開始不停地見到和使用到了。其實,hash就是一種(key=>value)形式的鍵值對,如數學中的函數映射,允許多個key對應相同的value,但不
mysql中的幾種存儲引擎
要求 mvc str 適合 存儲結構 style image img ext mysql常用的幾種存儲引擎 MyISAM: (1)做很多count 的計算; (2)插入不頻繁,查詢非常頻繁; (3)沒有事務。 InnoDB: InnoDB邏輯存儲結構:所有表的數據被邏輯的
使用synchronized的幾種場景
作用 div 代碼 public 執行 eth 得到 不能被繼承 另一個 1.修飾一個方法synchronized 修飾一個方法很簡單,就是在方法的前面加synchronized,例如: public synchronized void method() { //
MySQL 索引分類和適用場景
一、 MySQL: 索引以B樹格式儲存 Memory儲存引擎可以選擇Hash或BTree索引,Hash索引只能用於=或<=>的等式比較。 1、普通索引:create index on Tablename(列的列表) alter table TableName add
MySQL叢集的幾種方案
組建MySQL叢集的幾種方案 LVS+Keepalived+MySQL(有腦裂問題?但似乎很多人推薦這個) DRBD+Heartbeat+MySQL(有一臺機器空餘?Heartbeat切換時間較長?有腦裂問題?) MySQL Proxy(不夠成熟與穩定?使用了Lua?是不是用了他做分表則可以不用更改
Mysql索引失效的情況,及更優使用情況
轉https://blog.csdn.net/wuseyukui/article/details/72312574 案例所用的表結構、索引、與資料如下: 索引失效與優化 1、全值匹配我最愛 2、最佳左字首法則(帶頭索引不能死,中間索引不能斷)
MySQL索引失效
net 默認值 != 可能 tails 分析工具 ans left 永遠 Google了很多“MySQL索引失效”的文章,寫的都很雜亂,於是自己綜合了幾篇文章,整理了一下。 參考資料: https://www.jianshu.com/p/932b
mysql匯出資料庫幾種方法
mysql教程匯出資料庫教程幾種方法 方法一 cmd 到mysql bin目錄下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables databasename>database.sql 
資料庫建立索引的幾種方法
1、普通索引 CREATE INDEX indexName ON mytable(username(length)); 建立表的時候直接指定: C
登入mysql資料庫的幾種方式
登入mysql資料庫的幾種方式 第1種 (通過mysql自帶的客戶端,MySQL 5.5 Command Line Client) 不推薦這種方式 注意:這種登入方式,只適用於root使用者,不夠靈活!(只適合於root使用者登入,只限於root使用者,以後我們可
關於跨域的幾種場景
什麼是跨域JavaScript出於安全方面的考慮,不允許跨域呼叫其他頁面的物件。但在安全限制的同時也給注入iframe或是ajax應用上帶來了不少麻煩。這裡把涉及到跨域的一些問題簡單地整理一下:首先什麼是跨域,簡單地理解就是因為JavaScript同源策略的限制,a.com