• 索引学习


    索引就是帮助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

  • 相关阅读:
    Android中ProgressDialog的应用
    Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag
    android onKeydown
    8 个最优秀的 Android Studio 插件
    Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
    Android提供的LruCache类简介
    Android设计中的.9.png与Android Studio中的设置
    js实现双击后网页自己主动跑-------Day55
    Oracle经常使用函数
    《R实战》读书笔记三
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/16529580.html
Copyright © 2020-2023  润新知