Mysql索引介绍

作者: 缘来是你ylh | 来源:发表于2019-03-23 08:54 被阅读6次

什么是索引?我们可以这么理解,索引就好比是一本书的目录,拿一本你不了解的书给你,让你找某一个知识点最快的方式就是先查找目录,定位页数然后直接翻到具体页数。

使用索引的好处

  • 避免了检索数据时磁盘的 全表扫描,可以节省扫描时间,可以节省记录排队进入内存的和CPU的时间
  • 对于多表连接和嵌套查询更加有利;select * from stu_info where id in(select s_id from marks_info where marks>60)
  • 对特定的索引列找出MAX()或MIN()值。

使用索引的缺点

  • 索引文件占用磁盘空间
  • 如果建立的索引过多,那么扫描,索引目录文件浪费时间过多;
  • 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE,MySQL不仅要保存数据,还要保存一下索引文件。

查看索引

  • desc tbname;

    Key字段: MUL普通 pri主键 uni唯一

  • show index from 表名;//查看表的索引

  • explain 分析sql的索引使用情况

Mysql中主要有4类索引

  1. 主键索引(primary key)
  2. 唯一索引(unique)
  3. 常规索引(index)
  4. 全文索引(fulltext)

根据记录的特点

  • 普通索引:index(常规索引)

    • 表中的任何字段都可以建立普通索引(记录可以为null,记录可以重复)

      Create index 索引名 on 表名(字段名)

    • 常规索引技术是关系型数据查询中最重要的技术,如果要提升数据库的性能,索引优化是首先应该考虑的,因为他能使我们的数据库得到最大性能方面的提升。如果没有索引的数据表,就没有排序的数据集合,要查询数据就需要进行全表扫描。有索引的表是一个在索引列上排序了的数据表,所以可通过索引快速定位记录。

    • 在Myisam数据表中数据行保存在数据文件中,索引保存在索引文件中。但是在Innodb数据表中,数据与索引放在同一个文件中。

    • 常规索引也存在缺点,例如,占用磁盘空间,而且还会减慢在索引数据列上的插入、删除、修改操作,他们也需要按照索引列上的排序格式执行。

    • 因此索引应该创建在搜索、排序、分组等操作所涉及的数据列上。也就是在where子句,多表查询中的from子句、order by 或 group by 子句中出现过的数据列最合适用来创建这种索引。但是不要建太多索引,索引会消耗资源。

  • 主键索引: 记录不能为空,记录不能重复

    主键索引是关系型数据库中最常见的索引类型,主要作用是确定数据表中的一条特定的数据的位置。数据表会根据主键的唯一性来唯一标识每条记录,这样可以加快寻址定位的速度,最好每张表都指定一个主键

    create table 表名(id int(5) primary key;

create table test (

​ Id int(5) not null auto_increment,

​ Name varchar(4) not null,

​ Primary key(id)

);

  • 唯一索引:unique index

    • 唯一索引的记录可以为空[null],但是记录不能重复,与主键的不同之处在于每个数据表中只能有一个主键索引,但是可以有多个唯一索引,如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引时,就应该使用 unique 把它定义为一个唯一索引

    • 在有新纪录插入的时候,就会自动检测新纪录的这个字段值,是否已经在某个现有的记录的这个字段里出现过了,如果是,Mysql 将拒绝插入这条记录

    • 其实创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据重复。

      Create unique index 索引名 on 表名(字段名)

根据索引的个数

单列索引,以上讲的都是单列

多列索引

就是索引内容为多个字段,建立一个多列索引就相当于建立多个单列索引,建立两个字段的多列索引就相当于建立了三个索引,在创建索引的时候,尽量创建多列索引。

  • 多列普通索引

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

  • 多列唯一索引

    create unique index 索引名 on 表(字段1,字段2)

  • 多列主键索引(复合主键)

    错误 :

    create table news(
      id int(2) auto_increment primary key,
      name varchar(20) primary key,
    );
    
    

    正确:

    create table 表名(
      字段1,
      字段2,
      ...
      primary key(字段1,字段2……)
    );
    
    

根据内容索引

根据字段的value长度进行建立索引

  • 短索引:

    建立短索引的字段特点: 字符型varchar或者文本型text的字段,字段的内容前半部分出现重复的情况比较少;

    如:河南信阳男子小学门口砍杀24人获死刑,日韩改变态度允许民航向中国通报飞行计划,驻欧盟使团发言人:“法轮功”是反华政治组织,湾强制大陆资本21日内撤出有线电视领域,彭丽媛撰文怀念恩师感谢提携之情 称其为伯乐

    title varchar(120)

    create index 索引名 on 表(字段(20))

    create index title on news(title(20))

  • 单列普通短索引

    create index 名 on 表(字段1(长度))

  • 单列唯一短索引

    create unique index 名 on 表(字段1(长度))

  • 单列主键短索引

    create table aa(

    ​ id int(11) ,

    ​ ...

    ​ primary key(id(3)

    )

  • 多列普通短索引

    create index 名 on 表(字段1(长度),字段2(长度))

  • 多列唯一短索引

    create unique index 名 on 表(字段1(长度),字段2(长度))

  • 多列主键短索引

    create table news_info (

    ​ id int (2),

    ​ title varchar(100),

    ​ author varchar(50),

    ​ content varchar(500),

    ​ primary key(title(20),author(10))

    );

  • 全文索引 fulltext index

    • 如果查询的字段的部分内容在该内容中出现率>50%或者表中记录<2条的时候,全文索引没用

    • 50% 全文索引也没用

      Create fulltext index 索引名称 on tbname(column);

    • innodb引擎中没用

    • MYSQL 默认不开启 全文索引

      修改mysql配置文件:window服务器为my.ini,linux服务器为my.cnf,

      在 [mysqld] 后面加入一行“ft_min_word_len=1”,然后重启Mysql。

  • 全文索引的使用: 不区分大小写

    Select xxx from tbname WHERE MATCH (索引字段) AGAINST (‘关键字’);

    REPAIR TABLE table_name; 重新加载表内存

Sphinx,dede

删除索引

drop index 索引名 on 表名

索引没有名称怎么删除?

ALTER TABLE table_name DROP PRIMARY KEY

建立索引注意要点

  • 检索速度:主键-->唯一-->普通--->没有索引

  • 索引内容匹配的长度: 能建立短索引尽量的建立短索引

  • 尽量建立多列索引(但是多列索引不能过多)

  • 建立的索引(字段)必须是在where后经常频繁出现的字段

    1. 表的主键、外键必须有索引(主键默认有索引,外键是表与表之间联系的字段)
    2. 数据量超过300条记录的表应该有索引
    3. 经常与其他表进行连接的表,在连接字段上应该建立索引(外键)
    4. 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引
    5. 索引应该建在选择性高的字段上
    6. 对于大的文本字段甚至超长字段应该建立全文索引

相关文章

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • MySQL索引篇

    1 索引介绍 1.1 索引是什么 ​ 官方介绍索引是帮助MySQL高效获取数据...

  • mysql索引

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方...

  • mysql索引及查询

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方...

  • MySQL部门培训-索引篇

    章节目录 MySQL索引学习路径 MySQL索引介绍 索引分类 索引建立技巧 小试牛刀-索引使用预判 explai...

  • 【转】MySQL索引操作命令小结

    MySQL索引操作命令小结 这篇文章主要介绍了MySQL索引操作命令小结,本文讲解了创建索引、查询索引、删除索引等...

  • MySQL索引类型总结和使用技巧以及注意事项

    索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型...

  • mysql索引使用

    索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型...

  • MySQL索引使用

    索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。 下面介绍几种常见的MySQL索引类...

  • Mysql索引介绍

    这节讲述的是InnoDB使用的锁类型: 包含: Shared and Exclusive Locks(共享锁与独占...

网友评论

    本文标题:Mysql索引介绍

    本文链接:https://www.haomeiwen.com/subject/zeammqtx.html