有了索引,我们根据索引为条件进行数据查询速度就非常快
① 索引本身有”算法”支持,可以快速定位我们要找到的关键字(字段)
② 索引字段与物理地址有直接对应,帮助我们快速定位要找到的信息
一个数据表的全部字段都可以设置索引
#### 类型
四种类型:
① 主键 primary key
auto\_increment必须给主键索引设置
信息内容要求不能为null,唯一
② 唯一 unique index
信息内容不能重复
③ 普通 index
没有具体要求
④ 全文 fulltext index
myisam数据表可以设置该索引
复合索引:索引关联的字段是多个组成的,该索引就是复合索引。
![Image](https://box.kancloud.cn/bd6786f623890bf997bb0cad2414d3ab_276x211.png)
#### 添加索引
![Image](https://box.kancloud.cn/450a7a5d69b0b395cbfe925b03ac9c0e_474x93.png)
创建一个复合索引:
索引没有名称,默认把第一个字段取出来当做名称使用。
![Image](https://box.kancloud.cn/446d7e0798fc2b6a3670e198403f6e7e_450x60.png)
![Image](https://box.kancloud.cn/67a6cdd0bfba4322f77d26dbc852c702_450x221.png)
#### 删除索引
alter table 表名 drop primary key; //删除主键索引
注意:该主键字段如果存在auto\_increment属性,需要先删除之
alter table 表名 modify 主键 int not null comment ‘主键’;
去除数据表主键字段的auto\_increment属性:
![Image](https://box.kancloud.cn/314dbe24a4f0d07fe2184ea392faa903_462x61.png)
![Image](https://box.kancloud.cn/ef80cfe5819ef7d0f7b6b4706f7926ef_426x185.png)
禁止删除主键,原因是内部有auto\_increment属性:
![Image](https://box.kancloud.cn/4ad08dbf09702f7ed2f49d7ced92abb0_536x48.png)
alter table 表名 drop index 索引名称; //删除其他索引(唯一、普通、全文)
删除主键:
![Image](https://box.kancloud.cn/12b35ab67995490c0ee50d3858c6549c_356x66.png)
删除其他索引:
![Image](https://box.kancloud.cn/dc42f45ed168ac6d591f720770555626_337x203.png)
#### 执行计划
针对查询语句设置执行计划,当前数据库只有查询语句支持执行计划。
每个select查询sql语句执行之前,需要把该语句需要用到的各方面资源都计划好
例如:cpu资源、内存资源、索引支持、涉及到的数据量等资源
查询sql语句真实执行之前所有的资源计划就是执行计划。
我们讨论的执行计划,就是看看一个查询sql语句是否可以使用上索引。
具体操作:
explain 查询sql语句\\G;
1条 sql语句在没有执行之前,可以看一下执行计划。
![Image](https://box.kancloud.cn/9e095a7feaf66df71e03da2ac954ff93_474x232.png)
主键索引删除后,该查询语句的执行计划就没有使用索引(执行速度、效率低)
![Image](https://box.kancloud.cn/f8a07eb156a5dc9d9e23ae9e9a81c2c2_454x278.png)
#### 索引覆盖
给ename和job设置一个复合索引
![Image](https://box.kancloud.cn/3c2fc6db37617978ddb876c3d055659b_405x84.png)
![Image](https://box.kancloud.cn/c11866857d5b85d8d4d5813c8a040bd8_361x194.png)
索引覆盖:我们查询的全部字段(ename,job)已经在索引里边存在,就直接获取即可
不用到数据表中再获取了。因此成为”索引覆盖”
该查询速度非常快,效率高,该索引也称为”黄金索引”
索引本身需要消耗资源的(空间资源、升级维护困难):// .MYI 文件
#### 索引原则
##### 字段独立原则
**select \* from emp where empno=1325467**; //empno条件字段独立
select \* from emp where empno+2=1325467; //empno条件字段不独立
只有独立的条件字段才可以使用索引
独立的条件字段可以使用索引, 不独立的条件字段不给使用索引
##### 左原则
模糊查询,like % \_
%:关联多个模糊内容
\_: 关联一个模糊内容
select \* from 表名 like “beijing%”; //使用索引
select \* from 表名 like “beijing\_”; //索引索引
查询条件信息在左边出现,就给使用索引
XXX% YYY\_ 使用索引
%AAA% \_ABC\_ %UUU 不使用索引
没有使用索引(中间条件查询):
![Image](https://box.kancloud.cn/8a71bed38c265f4afe7c3f8e53b953fc_454x29.png)
![Image](https://box.kancloud.cn/ad954570660d48edd47ecc0e81667d92_414x82.png)
左原则使用到索引
![Image](https://box.kancloud.cn/2d7bed64541277ee6ac70964a7655673_447x156.png)
##### 复合索引
ename复合索引 内部有两个字段(ename,job)
① ename(前者字段)作为查询条件可以使用复合索引
② job(后者字段)作为查询条件不能使用复合索引
复合索引的第一个字段可以使用索引:
![Image](https://box.kancloud.cn/82090d424591dd3c456a19030950f988_416x195.png)
复合索引的其余字段不能使用索引:
![Image](https://box.kancloud.cn/97544c6a7d2de5b734cedfb3c61b567a_418x189.png)
如果第一个字段的内容已经确定好,第二个字段也可以使用索引:
![Image](https://box.kancloud.cn/7923f2f13e28c13f9297780d3032326d_528x185.png)
##### or原则
OR左右的关联条件必须都具备索引 才可以使用索引:
![Image](https://box.kancloud.cn/e52007761008d3f1980872aecd9484b0_535x188.png)
or的左右,只有一个有索引,导致整体都没有的使用:
![Image](https://box.kancloud.cn/6d1aa8c579102b59da7af608e481103d_473x205.png)
#### 索引设计
要估算每个数据表全部的查询sql语句类型
分析、统计每个sql语句的特点(where/order by/or等等)
原则:
① 被频繁执行的sql语句要设置
② 执行时间比较长的sql语句(可以统计)
③ 业务逻辑比较重要的sql语句(例如支付宝2小时内答应返现的业务逻辑)
##### 前缀索引
设计索引的字段,不使用全部内容,而只使用该字段前边一部分内容。
如果字段的前边N位的信息已经可以足够标识当前记录信息,就可以把前边N位信息设置为索引内容,好处:索引占据的物理空间小、运行速度就非常快。
具体实现:
① 操作 alter table 表名 add index (字段(位数))
② 前边到底取得多少位,才是记录的唯一标识
总记录数目/前n位记录数目 = 比值;
select count(\*) from 表名;
mysql字符串截取:substring(字段,开始位置1开始,长度)
![Image](https://box.kancloud.cn/b74f7489fba77a32c4c855d6e838d4fa_524x235.png)
从结果可以看出,密码的前9位就可以唯一标识当前记录信息:
![Image](https://box.kancloud.cn/01a62a3550bee6d9b48856fd4280820d_421x84.png)
##### 设计原则
字段内容需要足够花样,性别字段不适合做索引
##### 全文索引
![Image](https://box.kancloud.cn/ad651e2cbc0b0c9d7070b07b1748fd3c_232x82.png)
Mysql5.5 Myisam存储引擎 支持全文索引
Mysql5.6 Myisam和Innodb存储引擎 都支持全文索引
目前中文不支持全文索引。
建个表
![Image](https://box.kancloud.cn/ad5ab42a560e567a72c5f45f2eff349e_473x183.png)
![Image](https://box.kancloud.cn/b9a50c1538374633747afafe8df6b2c5_502x83.png)
需要变形为match() against()才可以使用全文索引:
![Image](https://box.kancloud.cn/3ff929d059aa80bc90bae4b6193bb65f_506x114.png)
![Image](https://box.kancloud.cn/4d58f4ca8a6ca04621a28cafaf288cad_505x60.png)
- PHP
- 页面跳转
- 数据类型和运算符
- 整形
- 浮点型
- 字符串型
- 布尔型
- 判断数据类型
- 传值
- 类型转换
- 常量
- 进制转换
- 运算符
- 各种结构
- 数组
- 分类
- 创建
- 多维数组
- 数组操作函数
- 数组指针
- 排序
- 数组交换需要注意的
- 函数
- 创建函数
- 参数传递
- 参数数量问题
- 返回值
- 可变函数
- 匿名函数
- 冒泡,选择,二分
- 变量的作用域
- 局部作用域中使用全局
- use
- 有关函数的系统函数
- 递归
- 递推(迭代)
- 面向对象
- 类和对象
- 值传递
- 引用传递
- 成员
- 构造和析构调用上级同类方法
- 重写
- 最终类
- 最终方法
- 设计模式
- 抽象类
- 抽象方法
- 抽象类和抽象方法的细节
- 重载
- 接口
- 类和接口的总结
- 自动加载
- 克隆
- 对象的遍历
- 内置标准类
- 其他类型转对象类型
- 类型约束
- 魔术方法
- static关键字
- 命名空间
- 子级空间
- 引入机制
- 公共空间
- 使用注意
- 错误处理
- 错误的触发
- 错误报告的显示
- 错误日志的记录问题
- 自定义错误处理器
- 异常抛出
- 文件锁
- 文件处理
- 序列化与反序列化
- 目录操作
- 文件操作
- 文件上传
- $_FILFS
- 多文件上传处理
- 绘图技术
- 创建画布资源
- 操作画布
- 导出
- 销毁资源
- 验证码
- 补充文件居中
- 在图像上写入一行TTF字体的文本
- 获得图像相关信息
- 水印
- 等比例缩放
- 常见错误
- HTTP协议
- URL的构成
- 请求
- 防盗链
- 响应
- 使用header()禁用缓存
- 下载文件的HTTP响应头
- 文件下载
- HTTPS
- 会话技术
- cookie
- session
- PHP操作MySQL函数
- 登录
- 一些函数
- 从结果集中取出一行数据
- 获取行数,列数,字段名
- 安全
- 缓存
- 补充
- MySQL
- 语法
- 备份和恢复
- 注释
- 语句行
- 字符集
- 校验级
- 存储引擎
- 数据库操作
- 创建数据库
- 删除数据库
- 显示数据库
- 修改数据库
- 数据类型
- 整数类型
- 小数类型
- 日期时间型
- 字符和文本型
- enum类型
- set类型
- 时间类型
- 表操作
- 创建
- 索引
- 约束
- 表选项列表
- 表的其他语句
- 视图语法
- 增删改查
- 插入数据(增)
- 删除数据(删)
- 修改数据(改)
- 查询(查)
- 用户和权限管理
- 用户管理
- 权限管理
- PDO
- 与PDO相关的几个类
- 连接数据库
- 使用
- PDO的错误处理
- PDO结果集对象
- pdo结果集对象的常用方法
- PDO预处理
- 常用属性
- mysql编程
- 事务
- 语句块
- mysql中的变量
- (存储)函数
- 存储过程procedure
- 触发器(trigger)
- mysql优化
- 存储引擎
- 字段类型
- 逆范式
- 索引
- Memcache
- 与redis区别
- 安装
- php开启扩展
- php操作memcache
- Key的命名
- 有效期
- 各种数据类型存储
- 删除
- 第三个参数压缩作用
- 其他相关操作方法
- 终端命令操作方式
- 获取memcache统计信息
- Git
- 创建一个git仓库
- 添加
- 修改文件
- 删除文件
- 克隆
- 个人网站
- Ajax
- 发起请求
- 接受响应
- 常用属性和方法
- get和post
- get
- post
- 同步和异步
- 什么时候使用同步请求?
- 分页
- xml的接收和处理
- JSON
- 无刷新表单提交和进度条
- JQuery操作ajax
- iframe
- 邮件
- 介绍
- 发送邮件
- 直投邮件
- 中转邮件发送
- phpmailer
- 正则表达
- 简单使用
- preg_match()
- 正则内容
- 定义字符集
- 特别字符集
- 组合字符集
- 限制字符
- 模式修正符
- 进行全局匹配