1. 程式人生 > >mysql 時間索引失效

mysql 時間索引失效

專案中查詢時間斷的資料發現查詢時間很長。懷疑沒有走時間的索引,於是explain一下

EXPLAIN select * from t_order where created_at>'2015-01-01 00:00:00' and created_at<'2017-01-01 00:00:00'


解析:

id:

表示執行的順序,id的值相同時,執行順序是從上到下,id的值不同時,id的值越大,優先順序越高,越先執行

select_type:

1、SIMPLE表示不包含子查詢和union

2、查詢中若包含子查詢,最外層查詢則標記為:PRIMARY

3、在select或者where列表中包含了子查詢,則標記為:SUBQUERY

4、在from的子查詢會標記為:DERIVED 

5、從union selcect出來的結果被標誌為:UNION RESULT

type:

表示找到需要行的訪問型別

ALL,index,range,ref,eq_ref,const,system,NULL

效能從最差到最好

key:

表示使用哪個索引

從上面的截圖看沒有走create_at索引。

上網查到資料:

當表的索引被查詢,會使用最好的索引,除非優化器使用全表掃描更有效。優化器優化成全表掃描取決與使用最好索引查出來的資料是否超過表的30%的資料。
優化器更加複雜,其估計基於其他因素,列入表的大小,行數和I/O塊的大小。
發現原因:
使用count整張表的資料,和條件的資料發現已經超過30%,,所以失效。在建立索引的時候,要根據列基數來建立。列基數=列中不同的資料/除以總資料。越接近1表示

重複資料越少,越適合建立索引。

解決:

根據上面的理論,時間斷的範圍通過訂單號查詢。因為訂單號可以區分時間,並且列基數=1;

相關推薦

mysql 時間索引失效

專案中查詢時間斷的資料發現查詢時間很長。懷疑沒有走時間的索引,於是explain一下 EXPLAIN select * from t_order where created_at>'2015-01-01 00:00:00' and created_at<'201

【踩坑】MySQL時間索引失效

專案中查時間資料段資料時,發現查詢時間很長,RDS查了一下執行計劃: 各列解析說明: id:表示執行的順序,id的值相同時,執行順序是從上到下,id的值不同時,id的值越大,優先順序越高,越先執行 select_type: 1、SIMPLE表示不包含子查詢和un

mysql索引失效

width 優化 c89 使用 files tle index ddd sha 一、成功的索引優化1.表數據如下:2.查詢語句如下:explain select id, age, level from employee where dpId = 1 and age = 30

Mysql索引失效(應避免)(十)

https://blog.csdn.net/qq_29347295/article/details/79112102 版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/qq_29347295/article/de

Mysql引起索引失效的原因總結

在資料庫中做查詢等操作,經常發現查詢很慢,但是已經在列上建了索引,最後經過研究發現,很多種情況引起了索引失效。 下面就對遇到的引起索引失效的原因做一下總結(不包括索引本身無效的情況),歡迎博友們補充。 1、對單欄位建了索引,where條件多欄位。 例:建了以下索引: 查詢

Mysql索引失效

【優化口訣】  全值匹配我最愛,最左字首要遵守;  帶頭大哥不能死,中間兄弟不能斷;  索引列上少計算,範圍之後全失效;  LIKE百分寫最右,覆蓋索引不寫*;  不等空值還有OR,索引影響要注意;  VAR引號不可丟, SQL優化有訣竅。 解析索引失效案例: 前提建立了

Mysql 資料庫索引失效

1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼儘量少用or的原因) 注意:要想使用or,又想讓索引生效,只能將

MySQL索引失效的幾種情況

模糊 運算 全表掃描 mysq 子節點 葉子節點 數據 都是 記錄 1.索引不存儲null值 更準確的說,單列索引不存儲null值,復合索引不存儲全為null的值。索引不能存儲Null,所以對這列采用is null條件時,因為索引上根本 沒Null值,不能利用到索引,只能全

MySQL優化(5):索引失效分析、in與exists使用場合

有一個 來替 null 決定 index idt class 分布 family 一、索引失效的情況   前文提及過可以通過explain的possible_keys、key屬性判斷索引是否失效,key如果為null,可能是索引沒建,也可能是索引失效,下面列舉一些會使索引失

Mysql索引失效的情況,及更優使用情況

轉https://blog.csdn.net/wuseyukui/article/details/72312574   案例所用的表結構、索引、與資料如下: 索引失效與優化 1、全值匹配我最愛 2、最佳左字首法則(帶頭索引不能死,中間索引不能斷)

MySQL隱式型別轉換導致索引失效

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

MySQL索引失效

net 默認值 != 可能 tails 分析工具 ans left 永遠 Google了很多“MySQL索引失效”的文章,寫的都很雜亂,於是自己綜合了幾篇文章,整理了一下。 參考資料: https://www.jianshu.com/p/932b

mysql 查詢優化 ~ 索引失效

一 explain  1 掃描行數根據的是表的統計元資料  2 索引的元資料具體指的就是show index from查到的索引的區分度,索引的區分度越高越好   3 表的元資料是定期收集,所以可能不準確  4 如果感覺explain不準確,可以用analyze tab

Mysql-索引,優化方案,以及索引失效情況:

宣告一下:下面的優化方案都是基於 “ Mysql-索引-BTree型別 ” 的 一、EXPLAIN 做MySQL優化,我們要善用 EXPLAIN 檢視SQL執行計劃。 下面來個簡單的示例,標註(1,2,3,4,5)我們要重點關注的資料 type列,連線型別。一個好的sql語句至少要達到ran

Mysql鎖機制--索引失效導致行鎖變表鎖

InnoDB預設的行鎖可以使得操作不同行時不會產生相互影響、不會阻塞,從而很好的解決了多事務和併發的問題。但是,那得基於一個前提,即 Where 條件中使用上了索引;反之,如果沒有使用上索引,則是全表掃描、全部阻塞。本文就以實際例子來演示這種情景。 1 準備資料 1.1 

MySQL高階 之 索引失效與優化詳解

案例所用的表結構、索引、與資料如下: 索引失效與優化 1、全值匹配我最愛 2、最佳左字首法則(帶頭索引不能死,中間索引不能斷) 如果索引了多個列,要遵守最佳左字首法則。指的是查詢從索引的最左前列開始 並且 不跳過索引中的列。  正確的示例參考上圖。 錯誤的示例: 

2、MySQL 索引失效的場景

索引失效的場景: 1、沒有 where 條件 直接看 SQL 語句   2、where 條件中所在的列沒有建立索引 show index from t;   3、從表中取得資料超過某個閾值。通常認為是 20~30%,即使 wher

Mysql索引以及使用索引可能失效的場景

我們先來回顧下mysql的索引: 普通索引:最基本的索引,沒有任何限制 唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。 主鍵索引:它 是一種特殊的唯一索引,不允許有空值。 全文索引:僅可用於 MyISAM 表,針對較大的資料,生成全文索引很耗時好空間。 組

mysql索引失效情況

1、最佳左字首原則——如果索引了多列,要遵守最左字首原則。指的是查詢要從索引的最左前列開始並且不跳過索引中的列。前提條件:表中已新增複合索引(username,password,age)分析:該查詢缺少username,查詢條件複合索引最左側username缺少,違反了最佳左

MySql索引失效的例子和不適合新增索引的情況

索引一失效情況:1、 對單欄位建了索引,where條件多欄位。2、  對索引列運算,運算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),導致索引失效。3、型別錯誤,如欄位型別為varchar,where條件用numb