数据库是用来存储数据的, 在互联网应用中数据库中存储的数据可能会很多 (大数据), 数据表中数据的查询速度会随着数据量的增长逐渐变慢, 从而导致响应用户请求的速度变慢
—— 用户体验差, 如何提高数据库的查询效率?
索引的介绍
索引, 就是用来提高表中数据的查询数据的
索引, 就是将数据表中某一列/某几列的值提取出来构造成便于查找的结构进行存储, 生成的数据表的
目录
当进行数据查询的时候, 现在
目录
中进行查找得到对应的数据的地址, 然后再到数据表中工具地址快速的获取数据纪录, 避免全表扫描
引索的分类
MySQL 中的索引, 根据创建索引的列的不同, 可以分为
- 主键索引: 在数据表的主键字段创建的索引, 这个字段必须被
primary key
修饰, 每张表只能有一个主键 - 唯一索引: 在数据表中的唯一列创建的引索 (unique), 此列的所有值只能出现一次, 可以为 NULL
- 普通索引: 在普通字段上创建的索引, 没有唯一性的限制
- 组合索引: 两个及以上字段联合起来创建的索引
说明
- 在创建数据表时, 将字段声明为主键 (添加主键约束), 会自动在主键字段创建主键索引
- 在创建数据表时, 将字段声明为唯一将 (添加唯一约束), 会自动在唯一字段创建唯一索引
创建索引
唯一索引
唯一索引的列的值不能重复
create unique index index_test1 on tb_testindex(tid);
普通索引
普通索引不要求创建引索的列的值的唯一性
create index index_test2 on tb_testindex(name);
组合索引
create index index_text3 on tb_testindex(tid, name);
全文索引
MySQL 5.6 版本新增的索引, 可以通过此索引进行全文检索操作, 因为 MySQL 全文检索不支持种文, 因此这个全文索引不被开发者关注, 在应用开发中通常时通过搜索引擎 (数据库中间件) 实现全文检索
create fulltext index <index_name> on tableName(fieldName);
索引使用
索引创建完成之后无需掉用, 当根据创建索引的列进行数据查询的时候会自动使用索引
组合索引需要根据创建索引的
所有字段
进行查询时触发
查看索引
# 查询数据表的索引
show indexes from tb_testindex;
# 查询索引
show keys from tb_testindex;
删除索引
索引时建立在表的字段上的, 不同的表中可能会出现相同名称的索引, 因此删除所有事需要指定表名
drop index index_test3 on tb_textindex;
索引的使用总结
优点
- 索引大大降低了数据库服务器在执行查询操作时扫描的数据量, 提高了查询效率
- 所以可以避免服务器排序、将随机 IO 变成顺序 IO
缺点
- 索引是根据数据表列的值创建的, 当数据表中数据发生 DML 操作时, 索引也需要更新
- 索引文件也会占用磁盘空间
注意事项
- 数据表数据不多时, 全表扫描可能更快, 此时不要使用索引
- 数据量大但是 DML 操作很频繁时, 不建议使用索引
- 不要在数据重复度高的列上创建索引 (性别)
- 创建索引之后, 要注意查询 SQL 语句的编写, 避免索引失效