索引就是帮助mysql高效获取数据的排好序的数据结构
凡哥说看mysql48讲就搞清楚 索引 https://www.bilibili.com/video/av755045734/?vd_source=caabcbd2a759a67e2a3de8acbaaf08ea
b加tree 可以范围查询 更快 (左大数右小数 顺序排)
1、联合索引(就是索引里面一条指定多个字段),加where条件的时候,需要带上联合索引的第一个字段筛选,不然索引不生效 (最左原则,如果后面where条件都用上了 那么字段也要按索引设置字段的顺序来 才会逐个生效)
EXPLAIN
SELECT * FROM DD WHERE reservation=0 AND id=2 AND keyword="张三"
2、创建索引后,范围查询后面的字段不会走索引 (感觉加了以后 keylen (索引字节)用得比较少了,其他没感觉)
SELECT * FROM DD WHERE id=2 AND age>10 and keyword="张三"
视频说 范围之后都失效,即上面只用到 WHERE id=2 AND age>10 这部分索引
联合索引是拿第一个索引字段去构建b+树的 ,依次顺序字段比较,当使用联合索引的时候,mysql是使用第一个索引字段去排序的,如果不使用第一个字段,那么对于这个已第一个字段建立的b+树结构就是无序的,所以走全表扫描(实际就是我已第一个字段排好序了,现在你不用,所以我不知道,后面有没有相同的字段数据),感觉就是设置每个索引他都已第一个索引字段去构建有序的b+树,你不用所以第一个字段,那么我找不到你查询字段对应的b+树有序结构
看点二
聚集索引 (索引和数据都放到一个文件)
如 innoDB引擎
此引擎生成的b+树存的是数据 (理论是这个比较快,但是要设置某列为主键,如果没有设置,他会自动找一列数据不重复的作为主键,如果找不到mysql会自动设置一列隐藏列确定唯一性,已这列组建b+树
推荐自己设置主键,如果不设置主键,让mysql自己设置隐藏主键,会影响mysql性能,所以自己能设置的不要交给mysql去做)
推荐int整型坐主键,因为你用String类型 mysql还得把字符转码进行比较,且字符占字节数比数字大占空间,比较麻烦且消耗性能
推荐主键还要自增,因为如果是无序的,在每次inster新增数据的时候,有可能会把原来的索引打乱很多,mysql需要重新对B+树做大量调整,如果是增序的,只需要一直往b+树后面追加节点不用打范围修改,从而加快了插入数据的性能
非聚集索引 (索引和数据分别一个文件)
如 myism引擎
frm为数据结构
myd为数据
myi为索引
此引擎生成的b+树存的是数据位置
数据库中一般有 B+数索引 和 hash索引
hash索引不适合范围查询
B+数索引适合
索引规则
1,使用or关键字(但是并不是所有带or的查询都会失效,如果有两个字段,两个字段都有索引就不会失效,会走两个索引)
单个条件有索引的写法
2,使用like关键字(但是并不是所有like查询都会失效,只有在查询时字段最左侧加%和左右侧都加%才会导致索引失效)---这个就是为啥开发只加右like的原因(但是也是可以解决的!!!)
3,组合索引(如果查询的字段在组合索引中不是最左侧的字段,那么该组合索引是不会生效的。即左前缀原则)
4, 索引列有运算符!=
5,索引列使用了函数 --索引不生效。where name = ‘阿里巴巴’ and substring(status,0,1) = ‘0’ and address =‘北京’ name是索引字段第一个 name生效。,后面2个字段都不生效
6,索引列使用is null 会使用索引 , is not null 不会使用索引。
7,索引列使用>或者<不一定失效 (使用了范围查询后面的字段不走索引)
8、索引字段 使用了 not in 索引失效 ---explain select * from tb_selller where name not in(‘阿里巴巴’,‘千度科技’) -在where 后使用 in 可以使用索引,但是使用 not in 不能使用索引。
————————————————
版权声明:本文为CSDN博主「詹姆斯gosling」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37177963/article/details/109136389
https://blog.csdn.net/u013733643/article/details/124064884
(这个例子挺多的,可以看下)
https://blog.csdn.net/weixin_56320090/article/details/117088591?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-7-117088591-blog-109136389.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-7-117088591-blog-109136389.pc_relevant_multi_platform_whitelistv1
索引的增删改查: https://www.cnblogs.com/kaibindirver/p/14149762.html