mysql索引不生效

并不是索引越多越好徽龟,索引是一種以空間換取時間的方式檐盟,所以建立索引是要消耗一定的空間却紧,況且在索引的維護上也會消耗資源。本文首發(fā)我的個人博客mysql索引不生效

這里有張用戶瀏覽商品表轴合,建表語句:

CREATE TABLE `product_view` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `server_id` int(11) NOT NULL,
  `duration` int(11) NOT NULL,
  `times` varchar(11) NOT NULL,
  `time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `time` (`time`),
  KEY `user_product` (`user_id`,`product_id`) USING BTREE,
  KEY `times` (`times`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

可以看出目前這張表是有3個索引的:

[圖片上傳失敗...(image-ea2eb4-1662602346130)]

我往這張表里面導入了10萬多條記錄。

[圖片上傳失敗...(image-a4e9e8-1662602346130)]

mysql不走索引的情況

1碗短、like查詢以“%”開頭(如果開頭受葛、結果都有“%”,也不會使用索引,走的是全表掃描)总滩;

[圖片上傳失敗...(image-72d250-1662602346130)]

我這里用了列出了4種情況纲堵,發(fā)現(xiàn)都是全表掃描,不走索引的咳秉⊥裰В可能因為times取值不夠離散,索引沒有走索引澜建。

2向挖、or語句前后沒有同時使用索引;

首先看看or語句前后同時使用索引:

[圖片上傳失敗...(image-4a756f-1662602346130)]

查詢走索引了。

再看看or語句前后沒有同時使用索引炕舵,product_id是索引字段何之,server_id不是索引字段:

[圖片上傳失敗...(image-829359-1662602346130)]

是沒有走索引的。

3咽筋、組合索引中不是使用第一列索引溶推;(不符合最左匹配原則)

這張表索引為時間time和一個組合索引:

[圖片上傳失敗...(image-8b2bf8-1662602346130)]

這里組合索引user_product,我們先使用user_id這個第一列索引奸攻,作為查詢條件蒜危,查看執(zhí)行計劃:

[圖片上傳失敗...(image-dc97c9-1662602346130)]

使用了索引。

接下來使用組合索引user_product的非第一列索引product_id睹耐,再看看執(zhí)行計劃:

[圖片上傳失敗...(image-2d27d4-1662602346130)]

沒有使用索引辐赞。

4、where條件中類型為字符串的字段沒有使用引號引起來硝训;【查詢where條件數(shù)據(jù)類型不匹配也無法使用索引响委,字符串與數(shù)字比較不使用索引,因為正則表達式不使用索引窖梁,如varchar不加單引號的話可能會自動轉換為int型赘风,使索引無效,產生全表掃描】

首先看看where后條件字符串正常使用引號:

[圖片上傳失敗...(image-b1d31e-1662602346130)]

使用了索引纵刘。

where后條件字符串不使用引號邀窃,而使用數(shù)字:

[圖片上傳失敗...(image-836b9a-1662602346130)]

可以看到,查詢沒有走索引假哎。

5蛔翅、當全表掃描速度比索引速度快時,mysql會使用全表掃描位谋,此時索引失效山析;(*數(shù)據(jù)量少*)

我把表數(shù)據(jù)刪了,里面留了7條數(shù)據(jù):

[圖片上傳失敗...(image-95723b-1662602346130)]

條件查詢索引字段列times:

[圖片上傳失敗...(image-e22bc3-1662602346130)]

顯然是沒有走索引的掏父。

6笋轨、在索引字段上使用“not”,“<>”,“!=”等等爵政;

經過驗證發(fā)現(xiàn)仅讽,使用這些符號后,依然會走索引钾挟。

7洁灵、對索引字段進行計算操作、使用函數(shù);

MySql 如果表中某個時間字段(datetime/…)設置了索引掺出,以函數(shù) DATE_FORMAT() 為查詢條件時徽千,為datetime設置的索引不生效,會引起全表掃描導致查詢很慢汤锨。

沒有用函數(shù)時候是走了索引的双抽,查出具體到時分秒的數(shù)據(jù):

[圖片上傳失敗...(image-3d93f8-1662602346130)]

使用函數(shù)data_format函數(shù),查出2020-08-14這一天的所有數(shù)據(jù):

[圖片上傳失敗...(image-dddbd2-1662602346130)]

沒有走索引闲礼,那么怎么解決呢牍汹?

[圖片上傳失敗...(image-46227d-1662602346130)]

如果一定要用函數(shù),比如date_format柬泽,可以通過這種方式慎菲,就會走索引。

8锨并、索引散列值(重復多)不適合建索引露该,例:性別、狀態(tài)等字段不適合琳疏。

不應該建立索引的字段規(guī)則

  1. 不應該在字段比較長的字段上建立索引有决,因為會消耗大量的空間

  2. 對于頻繁更新闸拿、插入的字段應該少建立索引空盼,因為在修改和插入之后,數(shù)據(jù)庫會去維護索引新荤,會消耗資源

  3. 盡量少在無用字段上建立索引【where條件中用不到的字段】

  4. 表記錄太少不應該創(chuàng)建索引

  5. 數(shù)據(jù)重復且分布平均的表字段不應該創(chuàng)建索引【選擇性太低揽趾,例如性別、狀態(tài)苛骨、真假值等字段】

  6. 參與列計算的列不適合建索引【保持列"干凈"篱瞎,比如from_unixtime(create_time) = '2014-05-29'就不能使用到索引,原因是b+樹中存的都是數(shù)據(jù)表中的字段值痒芝,但進行檢索時需要把所有元素都應用函數(shù)才能比較俐筋,顯然成本太大,所以語句應該寫成create_time = unix_timestamp('2014-05-29')】

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末严衬,一起剝皮案震驚了整個濱河市澄者,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖粱挡,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠幕,死亡現(xiàn)場離奇詭異,居然都是意外死亡询筏,警方通過查閱死者的電腦和手機榕堰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫌套,“玉大人逆屡,你說我怎么就攤上這事」辔#” “怎么了康二?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勇蝙。 經常有香客問我沫勿,道長,這世上最難降的妖魔是什么味混? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任产雹,我火速辦了婚禮,結果婚禮上翁锡,老公的妹妹穿的比我還像新娘蔓挖。我一直安慰自己,他們只是感情好馆衔,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布瘟判。 她就那樣靜靜地躺著,像睡著了一般角溃。 火紅的嫁衣襯著肌膚如雪拷获。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天减细,我揣著相機與錄音匆瓜,去河邊找鬼。 笑死未蝌,一個胖子當著我的面吹牛驮吱,可吹牛的內容都是我干的。 我是一名探鬼主播萧吠,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼左冬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纸型?” 一聲冷哼從身側響起拇砰,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤九昧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毕匀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铸鹰,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年皂岔,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹋笼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡躁垛,死狀恐怖剖毯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情教馆,我是刑警寧澤逊谋,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站土铺,受9級特大地震影響胶滋,放射性物質發(fā)生泄漏。R本人自食惡果不足惜悲敷,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一究恤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧后德,春花似錦部宿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绵患,卻和暖如春雾叭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藏雏。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工拷况, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留作煌,地道東北人掘殴。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像粟誓,于是被迫代替她去往敵國和親奏寨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容