1. 程式人生 > >MySQL索引失效的幾種場景

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