MySQL数据库中索引的使用

1.索引:

  • 针对数据库中现有的数据,整理出一块物理存储下来的用于快速查找数据用的的东西。
  • 数据库中实际数据的存储会按照某种索引,默认是按照主键(特殊的索引),并且数据物理结构上的存储顺序也是按照主键的顺序。
  • 索引的创建会增大物理上的开销。

2.创建索引时如何选择列的数据类型?

  • 数据类型小:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。能用bit类型,不用int,能用int,不用decimal.
  • 数据类型简单:整形数据比起字符,开销更小
  • 尽量避免Null:含有Null的列,很难进行查询优化,你可以用0,空字符串' '或者一个特殊的值去代替。

3.什么时候考虑创建索引?

  • 一开始做项目的时候,通常不会去考虑对数据库创建索引这件事,因为没有大量的数据作为基础,建立索引区别不大。当系统上线运营了一段时间后,数据库中数据量达到一定规模时我们可以进行监测,当发现检索速度变慢(比如大于100ms)时,我们就需要去分析业务逻辑中sql语句where后面的判断字段,针对这些字段建立索引进行优化。

4.建立索引对sql语句编写有什么要求?

  • 把'='值的条件尽量写在前面,表示范围的比如'>'尽量写在后面,尽量避免使用'or',否则建立索引对优化查询速度已经没有意义了。比如查询语句后面 where gender = 1 and isdelete = 0 and birthday > ‘1990-1-1’,我们可以建立一个包含gender、isdelete和birthday的组合索引

5.索引操作:

  • 查看索引

    show index from 表名;
  • 创建索引

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

    如果只有一个字段名,表示建立单列索引;多个字段名,表示建立组合索引。如果字段为字符类型,可以在字符后面指定长度,比如students(name(20),age),也可以不指定,其他类型(int,bit)的字段不需要指定长度

  • 删除索引

    drop index 索引名 on 表名;

6.索引缺点:

  • 虽然索引会提升查询的速度,但同时会降低更新表(insert into|delete from|update)的速度,因为更新表的时候还要保存一下索引文件
  • 建立索引,会占用磁盘空间的索引文件

7.性能监测工具profiles的使用------仅限于当前数据库的本次连接,下次连接失效

示例:

  • 开启运行时间监测

    set profiling = 1;
  • 执行查询语句

    select * from areas where atitle = '北京市';
  • 查看执行时间

    show profiles;
  • 为表areas的atitle列创建索引

    create index title_index on areas(atitle(20));
  • 再次执行查询语句

    select * from areas where atitle = '北京市';
  • 再次查看执行时间

    show profiles;

     

 

posted @ 2020-12-29 17:43  eliwang  阅读(817)  评论(0编辑  收藏  举报