对相关列使用索引是提高select操作性能最佳途径。
索引的几种常用类型:
- UNIQUE唯一索引
- FULLTEXT全文本索引
- SPATITL空间索引
索引可以在创建表的时候同时创建,也可以随时增加新的索引,创建唯一索引的语法为:
create tablestu(
-> id int not null,
-> username varchar(20),
-> password varchar(20),
-> unique index(id ASC)
-> );
也可以使用alter table的语法来增加索引,语法和create index类似
alter table table_name index index_name( column )
查看索引是否被使用
explainselect * from table_name +查询条件;
删除索引
drop index index_name on table_name
索引的设计原则
索引设计可以遵循一些已经有的规则,创建索引的时候金量考虑符合这些原则,便于提升索引的使用效率,更高效率的使用索引。
- 搜索的索引列,不一定是所要选择的列。最适合索引的列是出现在where子句中的列,或者连接自居中指定的列,而不是出现在select关键字后面的选择列表中的列。
- 使用唯一索引。考虑某列中的值的分布,如果该列的区分度很大,比如用户名,很容易区分很多行,但是如果是性别,就很难区分出来。
- 使用短索引,如果对字符串列进行索引,应该指定一个前缀长度,只要有可能尽量这样做,例如,有一个CHAR(200)的列,如果在前10个或20个字符内多数值是唯一的,那么就不要对整个列进行索引,对前10个或者20个字符进行索引能够节省大量索引空间,会使查询更快。更重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值。
- 不要过度使用索引,不要以为索引越多越好,每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能,在修改表时,索引必须进行更新,有时候可能需要重构,因此索引越多,所花费的时间越长。
小结
索引用于快速找出某个列中有一特定值的行,如果不使用索引,MySQL必须从第一条记录开始读完整个表直到找到相关的行,表越大,所花费的时间越长,如果表中查询的列有一个索引,MySQL能够快速到达一个位置区搜索数据文件中的中间,不需要从头开始遍历。