• 数据库索引


    在创建表的时候创建索引

      create table 表名(字段1 格式(宽度), 

                字段2 格式(宽度),

               index 索引名(想要成为索引的字段名));

    在建表的时候创建索引

      1.create table 表名 (字段名 类型 primary key,      #主键也可以作为索引值

               字段名 类型 (宽度));

      2.create index 索引名 on 表名(字段名);

      3.alter table 表名 add index 索引名(字段名);

    删除索引

       drop index 索引名 on 表名;

    索引的基本用法

      设置那个字段为索引,那么查找条件就是用这个字段,就能够加速查询

    索引的正确使用方法

      1.如果查询的结果是很多条数据的话我们仍然不能命中索引(> .< . >= . <= . !=(<>) . like . between and)

      2.如果我们选定某一列作为索引的时候,这一列必须是区分度比较高的列,如果这一列的内容都是重复的,那么创建了索引也不会有任何的加速效果。

      3.索引列不能在条件中参与计算。

      4.对于sql中的or来说,即便找到一个为假的条件也还是要去判断另外的条件是否成立,所以mysql并没有进行优化,所以查询都是从左到右依次进行的,所以使用or语句很难命中索引。

      对于sql语句中的and来说,由于只要找到一个为假的条件就可以放弃判断整个语句,所以mysql进行了优化,在所有and条件中会找到第一个区分度最高的列来使用它的索引,来达到加快查询速度的效果

      5.联合索引:最左前缀匹配原则

      create index 索引名 on 表名 (id,email,name)

      联合索引,第一个索引项是这个索引的姓,每一次查询条件必须带着一个索引项字段(例id)才能命中联合索引,如果条件中丢失了第一个索引项来创建条件,那么不能命中联合索引。。

      create index 索引名 on 表名 (id,email,name,sex)

    explain

    explain只是在真正使用某一条sql语句之前先来看看这条语句计划中是怎么执行的

    覆盖索引

      是你能够从辅助索引(非聚集索引)中直接拿到想要的数据,而不需要再经过IO从聚集索引中取值了。

      可以在配置中开启慢日志,把所有的sql语句执行的超过了你预期时间的都记录下来,方便我们查看具体慢的sql语句,来进行修改和优化

    聚集索引 直接把数据存储在建立好的索引中

    非聚集索引(辅助索引) name,sex 只有索引字段存储在索引中,该字段所在行的其他数据存储在另外的地址,在辅助索引的叶子节点上有一个指针指向这行数据所在的地址。

    select name where name like ‘eva’;

    select name ,sex where name like 'eva';

    age 创建一个索引

    select age where age > 60;     #覆盖索引

    select age,name where age > 60;     #不是覆盖索引

    age,name创建一个联合索引

    select age,name where age > 60;     #覆盖索引

  • 相关阅读:
    洛谷 简单字符串 'P1055ISBN号码' 问题
    P1424
    洛谷训练P1008(循环+暴力)
    C语言中一些知识点
    二叉树的基本功能实现方法(C++)
    值传递,引用传递,指针传递
    istringstream、ostringstream、stringstream类介绍
    类模板的友元
    C++ 标准库和标准模板库(STL)
    常用数据类型对应字节数
  • 原文地址:https://www.cnblogs.com/hahahu/p/10159154.html
Copyright © 2020-2023  润新知