MySql中的索引语法
创建索引
1
在创建表时创建索引:
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
2
在创建表以后添加索引:
ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name);
或者
CREATE INDEX index_name ON my_table(column_name);
在创建索引时,需要对表加锁,创建的索引需要占用磁盘空间。
2
根据索引查询:
具体的查询:
select * from table where column=column;(为column创建了索引)
模糊查询:
select * from table where colunm like "%a%";
3
删除索引
DROP INDEX my_index ON tablename;
或者
ALTER TABLE table_name DROP INDEX index_name;
4
查看表中的索引
show index from table;
5
查看语句使用索引的情况
//explain 加查询语句
explain SELECT * FROM table_name WHERE column_1='123';
索引的优缺点
优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;
劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表;
索引的分类
常见的索引类型有:主键索引,唯一索引,普通索引,全文索引,组合索引
1
主键索引:即主键索引,根据主键创建的索引,不允许空值,不允许重复。
2
唯一索引,用来建立索引的列的值必须是唯一的,可以为空
3
普通索引:用表中普通列建立的索引,没有任何限制
4
全文索引:用大文本对象的列构建的索引
5
组合索引:用多个列组合建立的索引,这多个列中的值不允许有重复
另外:
*遵循“最左前缀”原则,把最常用作为检索或排序的列放在最左,依次递减,组合索引相当于建立了col1,col1col2,col1col2col3三个索引,而col2或者col3是不能使用索引的。
*在使用组合索引的时候可能因为列名长度过长而导致索引的key太大,导致效率降低,在允许的情况下,可以只取col1和col2的前几个字符作为索引
ALTER TABLE 'table_name' ADD INDEX index_name(col1(4),col2(3));
表示使用col1的前4个字符和col2的前3个字符作为索引
索引的实现原理
MySql支持多种存储引擎,而各种存储引擎对索引的支持也不相同,因此,MySql数据库支持多种索引类型,如BTree索引,B+Tree索引,哈希索引,全文索引等。