日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql联合索引失效,需注意索引的最左原则

發布時間:2023/12/14 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql联合索引失效,需注意索引的最左原则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聯合索引一直在用,沒想到今天栽了跟頭,聯合索引竟然還有最左原則(左前綴原則)這么一個說法,那什么是最左原則呢?

DROP TABLE IF EXISTS `gu_suo`; CREATE TABLE `gu_suo` (`ID` varchar(16) NOT NULL,`ADM_DIV_CODE` varchar(16) NOT NULL,`VOUCHER_NO` varchar(16) NOT NULL,`NAME` varchar(16) DEFAULT '',`AGE` varchar(16) DEFAULT '',KEY `ID` (`ID`,`ADM_DIV_CODE`,`VOUCHER_NO`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;INSERT INTO gu_suo VALUES('1','530000','1234','小明','12'); INSERT INTO gu_suo VALUES('2','530000','1234','小張','13'); INSERT INTO gu_suo VALUES('3','530402','3333','小麗','14'); INSERT INTO gu_suo VALUES('4','530701','4444','小李','15'); INSERT INTO gu_suo VALUES('5','530000','3333','大白','15'); INSERT INTO gu_suo VALUES('6','530400','4444','紅中','14'); INSERT INTO gu_suo VALUES('7','530700','1233','東風','14'); INSERT INTO gu_suo VALUES('8','530921','1234','發財','13'); INSERT INTO gu_suo VALUES('9','530100','2223','門板','12');

先創建一張表,插入幾條數據,該表聯合索引順序為?KEY `ID` (`ID`,`ADM_DIV_CODE`,`VOUCHER_NO`),即:

ID——a

ADM_DIV_CODE——b

VOUCHER_NO——c

我們先看這樣幾條語句:

SELECT * FROM gu_suo WHERE ID='1' AND ADM_DIV_CODE='530000' AND VOUCHER_NO='1234'; //abc順序 abc三個索引都在where條件里面且都發揮了作用SELECT * FROM gu_suo WHERE VOUCHER_NO='1234' AND ID='1' AND ADM_DIV_CODE='530000' ; //cab順序 效果同上==條件順序在查詢之前會被mysql自動優化SELECT * FROM gu_suo WHERE ID='1' AND VOUCHER_NO='1234'; //ac a用到索引b沒有 所以c是沒有用到索引效果的,看下圖:

通過圖對比,不難看出聯合索引的最左原則,需要注意的是,聯合索引不同于使用兩個或多個單獨的索引,所以建立聯合索引時,順序特別重要,因為對索引中的所有列執行搜索或僅對前幾列執行搜索時,復合索引非常有用,但是如果僅對后面的任意列執行搜索時,復合索引則沒有用處,這就完全失去了復合索引的意義。之所以栽跟頭,就是在建表的過程中,對聯合索引的設計太過隨意,還好是在測試過程中及時發現問題。所以,在創建復合索引時應該將最常用的限制條件放在最左邊,依次遞減。

?

總結

以上是生活随笔為你收集整理的Mysql联合索引失效,需注意索引的最左原则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。