MYSQL索引的创建和使用

MYSQL索引的创建和使用:
CREATE TABLE 表名(
字段名 数据类型 [完整性约束条件],
       ……,
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]
);
说明:
    UNIQUE:可选。表示索引为唯一性索引。
    FULLTEXT:可选。表示索引为全文索引。
    SPATIAL:可选。表示索引为空间索引。
    INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。
    索引名:可选。给创建的索引取一个新名称。
    字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
    长度:可选。指索引的长度,必须是字符串类型才可以使用。
    ASC:可选。表示升序排列。
    DESC:可选。表示降序排列。
注:索引方法默认使用B+TREE

常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引
1、主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值;
ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index('col');
2、唯一索引:用来建立索引的列的值必须是唯一的,允许空值
ALTER TABLE 'table_name' ADD UNIQUE index_name('col');
3、普通索引:用表中的普通列构建的索引,没有任何限制
ALTER TABLE 'table_name' ADD INDEX index_name('col');
4、全文索引:用大文本对象的列构建的索引(下一部分会讲解)
ALTER TABLE 'table_name' ADD FULLTEXT INDEX ft_index('col');
5、组合索引:用多个列组合构建的索引,这多个列中的值不允许有空值
ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3');

索引的优缺点
优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;
劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;
      索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;
      构建索引会降低数据表的修改操作(删除,添加,修改)的效率,
      因为在修改数据表的同时还需要修改索引表;
      
MySQL数据库支持多种索引类型,如BTree索引,B+Tree索引,哈希索引,全文索引等等

注意:
1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够
2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行
3、在使用组合索引的时候可能因为列名长度过长而导致索引的key太大,导致效率降低
4、全文索引的查询也有自己特殊的语法,而不能使用LIKE %查询字符串%的模糊查询语法
   SELECT * FROM table_name MATCH(ft_index) AGAINST('查询字符串');

你可能感兴趣的:(数据库)