七、索引

MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效 获取数据的数据结构。

7-1、索引的分类

  • 主键索引 (primary key)

    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(unique key)
    • 唯一索引的 "唯一" 是指为列唯一,而唯一索引可重复
  • 常规索引 (key / index)
    • 默认的索引,关键字 key / index 设置
  • 全文索引 (FullText)
    • 在很大数据量才会使用,快速定位数据

基础语法

-- 索引的添加
-- 1、在创建表的时候用关键字声明
-- 2、创建后,用 ALTER/CREATE 进行添加 -- 显示 表A 所有的索引信息
show index from 表A -- 增加一个全文索引: (索引名) 列名
alter table 表 add fulltext index `aaa` (`aaa`) -- explain 分析sql的执行状况, 在语句的最前方加上即可

7-2、索引的测试

-- 创建索引前:(在100W条数据中查询某行记录)
SELECT * FROM app_user WHERE `name` = '用户99999' -- 执行耗时 : 0.566 sec
SELECT * FROM app_user WHERE `name` = '用户99999' -- 执行耗时 : 0.564 sec
SELECT * FROM app_user WHERE `id` = 99999 -- 执行耗时 : 0 sec 主键索引 -- 创建索引后:(在100W条数据中查询某行记录)
-- 索引命名规范: id_表名_字段名
CREATE INDEX id_app_user_name ON app_user (`name`) -- 执行耗时 : 11.511 sec EXPLAIN SELECT * FROM app_user WHERE `name` = '用户999989' -- 执行耗时 : 0 sec

创建索引前:(在100W条数据中查询某行记录)执行耗时 : 0.563 sec

EXPLAIN 关键字显示 sql 执行情况:


======================================================================================================================================================================

创建索引后:(在100W条数据中查询某行记录)几乎不用时间

EXPLAIN 关键字显示 sql 执行情况:

总结:索引在数据量小的时候,区别不大;但在大数据的时候,查询效率提升明显!

7-3、索引的使用

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表不需要加索引
  • 应该加在常用来 查询 的字段上

最新文章

  1. [linux系统]--常用命令
  2. 获取layer.open弹出层的返回值
  3. APIO2015 酱油记
  4. Spring Boot修改内置Tomcat端口号 (zhuan)
  5. 磁盘与目录的容量[转自vbird]
  6. MySQL的多实例
  7. 符号表实现(Symbol Table Implementations)
  8. centos下一个bash: XXX: command not found解决方案
  9. 2017广东工业大学程序设竞赛E题(倒水)
  10. python中用xpath匹配文本段落内容的技巧
  11. css解决多行溢出显示省略号
  12. Ansa 自动加载用户脚本设置
  13. 整合MVC实现文件上传
  14. mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)
  15. CF367C. Hard problem
  16. SPL标准库-数据结构
  17. .NET Core开发日志——Controller
  18. Employee类
  19. POJ 2665
  20. WCF-绑定模型(一)

热门文章

  1. 快速上手最新的 Vue CLI 3
  2. Axure遮罩 or 灯箱
  3. RMI原理揭秘之远程对象
  4. Linux shell基础(五)sed命令
  5. 图论--差分约束--POJ 1364 King
  6. 聊聊select, poll 和 epoll
  7. C语言程序设计实验报告三
  8. 前缀和(P2697 宝石串)
  9. spring的单元测试
  10. Java的Object.wait(long)在等待时间过去后会继续往后执行吗