一.介绍

为什么有索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构.

作用:

1.        快速查询数据

2.        保证数据的唯一性

3.        实现表与表之间的参照完整性

4.        在使用order by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。

优点:

1.        大大加快数据检索速度

2.        创建唯一索引,保证数据库表中每行数据的唯一性

3.        加速表之间的连接

4.        减少查询中分组和排序的时间

  索引在MySQL中也叫做“键”或者"key"(primary key,unique key,还有一个index key),是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少io次数,加速查询。(其中primary key和unique key,除了有加速查询的效果之外,还有约束的效果,primary key 不为空且唯一,unique key 唯一,而index key只有加速查询的效果,没有约束效果)

2.索引的数据结构:

Mysql索引管理:

功能:

#1. 索引的功能就是加速查找
#2. mysql中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以外,还有约束的功能

常用的索引:

普通索引INDEX:加速查找

唯一索引:
-主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
-唯一索引UNIQUE:加速查找+约束(不能重复) 联合索引:
-PRIMARY KEY(id,name):联合主键索引
-UNIQUE(id,name):联合唯一索引
-INDEX(id,name):联合普通索引

创建,删除缩印:

#方法一:创建表时
  CREATE TABLE 表名 (
字段名1 数据类型 [完整性约束条件…],
字段名2 数据类型 [完整性约束条件…],
[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名[(长度)] [ASC |DESC])
); #方法二:CREATE在已存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名 (字段名[(长度)] [ASC |DESC]) ; #方法三:ALTER TABLE在已存在的表上创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名[(长度)] [ASC |DESC]) ; #删除索引:DROP INDEX 索引名 ON 表名字;
# 实例:
#方式一
create table t1(
id int,
name char,
age int,
sex enum('male','female'),
unique key uni_id(id),
index ix_name(name) #index没有key
); #方式二
create index ix_age on t1(age); #方式三
alter table t1 add index ix_sex(sex); #查看
mysql> show create table t1;
| t1 | CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`name` char(1) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` enum('male','female') DEFAULT NULL,
UNIQUE KEY `uni_id` (`id`),
KEY `ix_name` (`name`),
KEY `ix_age` (`age`),
KEY `ix_sex` (`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

查询优化神器(explain):

执行计划:让mysql预估执行操作(一般正确)
all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const
id,email 慢:
select * from userinfo3 where name='alex' explain select * from userinfo3 where name='alex'
type: ALL(全表扫描)
select * from userinfo3 limit 1;
快:
select * from userinfo3 where email='alex'
type: const(走索引)

最新文章

  1. TextView使用大全
  2. 0039 Java学习笔记-多线程-线程控制、线程组
  3. 配置LVS + Keepalived高可用负载均衡集群之图文教程
  4. Operation not allowed after ResultSet closed--操作mysql数据库
  5. [转]MySQL关键性能监控(QPS/TPS)
  6. Ubuntu学习总结-05 安装和学习MySQL
  7. Oracle 组织架构(转)
  8. dedecms后台登录如何去除验证码设置
  9. JVM 运行时内存结构
  10. Qt5如何设置静态编译,解决生成的可执行文件打开出错问题
  11. Makefile.am编写规则
  12. stick footer布局
  13. poj2566尺取变形
  14. linux下查看账号密码的过期时间和设置时间
  15. Gitlab的安装与实践
  16. Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
  17. PBRT笔记(2)——BVH
  18. AI金融知识自学偏量化方向-目录0
  19. 机器学习入门-数值特征-进行二值化变化 1.Binarizer(进行数据的二值化操作)
  20. 协程的NullReferenceException 错误

热门文章

  1. IDEA问题java: -source 1.6 中不支持diamond、 lambda 表达式
  2. 2.ibatis执行流程解析
  3. Copy-On-Write in Swift
  4. Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
  5. Cortex-M3 操作模式与特权等级
  6. 学习Oracle数据库入门到精通教程资料合集
  7. 简单配置 docker swarm
  8. 浅谈JS中 reduce() 的用法
  9. FormGroup验证不起作用
  10. Vue组件传值,父传子,子传父,非父子组件