MySQL索引概述及用法

一、索引的概念

  • 数据库索引
  1. 是一个排序的列表,存储着索引值和这个值所对应的物理地址
  2. 无须对整个表进行扫描,通过物理地址就可以找到所需数据
  3. 是表中一列或者若干列值排序的方法
  4. 需要额外的磁盘空间

二、索引的作用

  • 数据库利用各种快速定为技术,能够大大加快查询速率
  • 当表很大或查询涉及到多个表时,可以成千上万倍地提高查询速度
  • 可以降低数据库的IO成本,并且还可以降低数据库的排序成本
  • 通过创建唯一索引保证数据表数据的唯一性
  • 可以加快表与表之间的连接
  • 在使用分组和排序时,可大大减少分组和排序时间

三、索引的分类

3.1 普通索引

  • 最基本的索引类型,没有唯一性之类的限制
  • 创建普通索引的方式
方法一:mysql> create index abc on test(id);
方法二:mysql> alter table test add index abc(id);
方法三:在建表时创建索引
       mysql> create table test(...index abc(id));

3.2 唯一索引

  • 与“普通索引”基本相同

  • 与普通索引的区别是索引列的所有值只能出现一次,即必须唯一

  • 创建唯一索引的方式

方法一:mysql> create unique index bcd on test (name);

方法二:mysql> alter table test add unique aaa(id);

方法三:在建表时就创建索引
       mysql> create table test(...unqiue index abc(id));

3.3 主键索引

  • 是一种特殊的唯一索引,指定为“PRIMARY KEY”
  • 一个表只能有一个主键,不允许有空值
  • 创建主键索引的方式
mysql> create table test01(id int(3) not null,name varchar(10),primary key(id));

3.4 组合索引(单列索引与多列索引)

  • 可以是单列上创建的索引,也可以是在多列上创建索引
  • 最左原则,从左往右依次执行
  • 创建组合索引的方式
mysql> create table test03(id int(3),name varchar(10),age int(2),index test(id,name));

3.5 全文索引

  • MySQL从3.23.23版本开始支持全文索引和全文检索
  • 索引类型为FULLTEXT
  • 可以在CHAR\VARCHAR或者TEXT类型的列上创建
mysql> alter table test01 add fulltext index abc(address);
  • 查看索引
语法:方法一:SHOW INDEX FROM TABLE_NAME;
     方法二:SHOW KEYS FROM TTABLE_NAME;

例:show index from test;
    show keys from test; 
  • 删除索引
语法:DROP INDEX INDEX_NAME ON TABLE_NAME;
     ALTER TABLE TABLE_NAME DROP INDEX INXEX-NAME;

例:drop index abc on test;
   alter table test drop index abc;
   alter table test01 drop primary key;    ## 删除主键索引

3.6 创建索引的原则依据

  • 表的主键、外键必须有索引
  • 记录数超过300行的表应该有索引
  • 经常与其他表进行连接的表,在连接字段上应该建立索引
  • 唯一性太差的字段不适合建立索引
  • 更新太频繁的字段不适合创建索引
  • 经常出现在where子句中的字段,特别是大表的字段,应该建立索引
  • 索引应该建在选择性高的字段上
  • 索引应该键在小字段上,对于大的文本字段甚至超长字段,不要建索引

猜你喜欢

转载自blog.csdn.net/u014042047/article/details/108092826