<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '使用者id', `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '使用者名稱', `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '使用者密碼', `create_essay` int(5) NOT NULL COMMENT '原創文章', `user_visited` int(10) NOT NULL COMMENT '被存取量', `user_rank` int(5) NOT NULL COMMENT '使用者排名', `perms` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `nickname` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '使用者暱稱', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 116856 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; // 建立組合索引 ALTER TABLE `user` ADD INDEX idx_username_password_user_rank (`username`,`password`,`user_rank`)
這裡有一個組合索引的最左匹配原則:MySQL最左匹配原則
檢視MySQL中索引是否命中可以使用explainh執行優化器來檢視
執行優化器,顧名思義,優化語句的,準確來說是優化查詢語句。其實就是在我們寫的select語句前加一個Explain關鍵字。
索引的命中與失效情況
建立一個組合索引
idx_username_password_user_rank(`username`,`password`,`user_rank`)
// 命中索引跟順序無關 explain SELECT * from `user` where username = "liuxiangcheng" and password = "515239" and user_rank = 1 explain SELECT * from `user` where user_rank = 1 and username = "liuxiangcheng" and password = "515239" explain SELECT * from `user` where user_rank = 1 and password = "515239" and username = "liuxiangcheng"
結果:
// 去掉大哥 explain SELECT * from `user` where password = "515239" and user_rank = 1
去掉大哥之後,索引失效,全表掃描。
我們先把那個聯合索引刪除掉,然後在username這一列上建立一個唯一索引:
刪除組合索引
drop index idx_username_password_user_rank on `user`
建立唯一索引
alter table `user` ADD UNIQUE key (`username`)
檢視索引
explain SELECT * from `user` where username= 'user110819'
explain SELECT * from `user` where concat(username,'')= 'user110819'
explain SELECT * from `user` where username like '%user11081'
explain SELECT * from `user` where username like 'user11081%'
explain SELECT * from `user` where username is not null
and情況:
explain SELECT * from `user` where username = "liuxiangcheng" and password = "515239"
or情況:
explain SELECT * from `user` where username = "liuxiangcheng" or user_rank = 1
我們給user_rank加上索引
alter table `user` ADD index (`user_rank`)
再次查詢:
explain SELECT * from `user` where username = "liuxiangcheng" or user_rank = 1
explain SELECT * from `user` where user_rank != 1 or explain SELECT * from `user` where user_rank <> 1
explain SELECT * from `user` where user_rank >(<,>=,<=) 1
varchar型別,如果用int型別來查詢,索引失效
資料庫user表中我們的password是varchar型別
如果我們在條件查詢中使用整形來替代,那麼這個時候索引就會失效,where varchar = int 索引失效
// password is varchar type explain SELECT * from `user` where password = 515239 explain SELECT * from `user` where password = '515239' explain SELECT * from `user` where password = "515239"
如果是int型別,我們使用varchar來替代,索引命中
// user_rank is int type explain SELECT * from `user` where user_rank = "1" explain SELECT * from `user` where user_rank = '1' explain SELECT * from `user` where user_rank = 1
總結隱式轉換:
1、組合索引中不遵循最左匹配原則,帶頭大哥不在,導致索引失效,全表掃描。
2、在索引列上做了函數操作,導致索引失效,全表掃描。
3、模糊查詢字首是以%開頭的,導致索引失效,全表掃描。
4、使用is not null 會導致索引失效。
5、使用or時,如果條件查詢中其中一個不帶索引,導致索引失效,全表掃描。
6、使用不等於(!= 或者<>)的時候,會導致索引失效。
7、使用範圍查詢(>、<、>=、<=)之後索引失效。
8、隱式轉換可能會導致我們的索引失效。
到此這篇關於MySQL索引命中與失效程式碼實現的文章就介紹到這了,更多相關MySQL索引命中與失效內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45