• mysql的索引


    索引的概念

    索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。索引相当于建立了一个数据的目录,存放的是数据所在的位置

    索引的优缺点和使用原则 

    优点: 

    1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引 

    2、大大加快数据的查询速度

    缺点:

    1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

    2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

    3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

    使用原则:

    通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。

    1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引where条件后的经常使用的查询字段

    2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

    3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

    作用总结:增加了查询的速度,但是影响了增删改的操作速度。

    索引的原理

    Mysql索引主要有两种结构:B+Tree索引和Hash索引。我们平常所说的索引,如果没有特别指明,一般都是指B树结构组织的索引(B+Tree索引)。

    B+Tree索引:又叫二叉树

    比如我有1、2、3、4、5、6、7、8、9这些数据

    btree的查询原理

    哈希索引的原理:

    精确匹配到索引列的查询。对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个较小的整数值,并且不同键值的行计算出来的哈希码也不一样。

    简单的例子,家里的物品,根据重量的不同,利用弹簧秤弹到不同的位置,下次再找物品时,可以拿一个与目标物品重量相同的物品,放到弹簧秤,弹到的位置就是要找的物品的位置。弹簧秤就相当于一个哈希算法。

    索引的分类

    普通索引、主键索引、唯一索引、全文索引

    普通索引:仅仅是加快查询速度

    唯一索引:不仅加快查询速度,该列的值不能重复

    主键索引:主键不能重复且不能为空      主键必唯一,但是唯一索引不一定是主键,一张表上只能有一个主键,但是可以有一个或多个唯一索引

    全文索引:fulltext  用于在一篇文章中,检索文本信息的。主要用来优化like语句的,因为like语句会一行一行的查找匹配值,查询效率慢

    查看一张表上的索引

     

    添加索引

    添加主键索引: ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

    添加唯一索引:ALTER TABLE `table_name` ADD UNIQUE (`column`)

    添加普通索引:ALTER TABLE `table_name` ADD INDEX ( `column` ) 

    添加全文索引:ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

    删除索引

    删除非主键索引:ALTER TABLE `table_name` drop INDEX ( `column` ) 

    删除主键:ALTER TABLE `table_name` drop PRIMARY KEY

    索引的用法

    主键、唯一、普通索引的使用,是直接where索引列=’值’

    全文索引的使用 where MATCH(列名) AGAINST(‘搜索值1,搜索值2,搜索值3’); 

    注:
    1.全文索引的字段类型必须为:char,varchar,text 。
    2.对于中文全文索引,必须先把字段值做好中文分词,每个关键词之间用“ ,”“ ”分开,不然即使全文索引还是无效,谁让这些都是老外开发的呢(英文单词之间都是空格,妥妥的)
    3.有人说将中文转成拼音,然后进行搜索,或许是一个好的方法,可以试一下。

    4、停止词:全文索引不针对非常频繁的词做索引,如this,is ,you 即搜索不到

  • 相关阅读:
    (004)maven执行junit单元测试,指定执行哪些测试类
    (009)Nginx静态资源web服务
    (008)Nginx的访问控制_介绍实现访问控制的基本方式
    (03)Nginx将配置文件default.conf重命名后报Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.解决方案
    (007)Nginx的请求限制_配置语法与原理
    (006)Nginx之模块讲解
    (005)Nginx之日志log_format
    (004)Nginx默认配置语法解析及演示
    (003)Nginx编译配置参数讲解
    Gym
  • 原文地址:https://www.cnblogs.com/mr171733/p/9566191.html
Copyright © 2020-2023  润新知