MySQL笔记总结
来源:互联网 发布:淘宝打折软件哪个好用 编辑:程序博客网 时间:2024/06/05 09:41
一、sql基础
1.sql执行顺序
2.七种join
内连接(两者交集)
select * from tableA a inner join tableB b on a.key=b.key;
左外连接(左表a独有部分加上两者交集,独有部分对应另一个表字段为null)
select * from tableA a left join tableB b on a.key=b.key;
左连接(左表a独有部分)
select * from tableA a left join tableB b on a.key=b.key where b.key is null;
右外连接(右表b的独有加上两者交集)
select * from tableA a right join tableB b on a.key=b.key;
右连接(右表b独有部分)
select * from tableA a right join tableB b on a.key=b.key where a.key is null;
全连接(a表独有加b表独有加两者交集)
select * from tableA a left join tableB b on a.key=b.key
union
select * from tableA a right join tableB b on a.key=b.key;
各自独有部分
select * from tableA a left join tableB b on a.key=b.key where b.key is null
union
select * from tableA a right join tableB b on a.key=b.key where a.key is null;
二、索引
1.说明
索引是帮助数据库高效获得数据的数据结构(排好序的快速查找数据结构,有B树结构、哈希),索引一般本身也很大,往往以索引文件的形式存在磁盘。
索引优势:提高检索效率、降低数据排序成本
索引劣势:实际是索引也是一张表,保存了主键和索引字段,并指向实体表记录,也要占空间;降低更新表的速度
2.索引种类
单值索引:索引只包含单列
唯一索引:列值必须唯一,但允许有空值
复合索引:索引包含多列
3.创建索引
可以使用create index 和alter table add index
4.索引结构
BTree、hash、full-text全文、R-Tree
5.创建索引情形
适合建索引:
主键自动建立唯一索引
频繁作为查询条件的字段
与其它表关联的查询字段
高并发下倾向创建组合索引
索引字段与排序字段、统计分组字段一致,可以提供排序速度
不适合建索引:
数据太少
频繁更新的字段
字段值重复太多(比如性别字段只有男女)
where条件里用不到的字段
三、explain执行计划
1.id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。id相同的执行顺序由上往下;id不同,如果是子查询,id号会自增,值越大优先执行
2.select_type:查询类型,有6种
simple:简单的select查询,不包含子查询和union
primary:查询中包含复杂的字子部分,最外层则被标记为primary
subquery:select或者where中包含子查询
derived:在from列表中包含的子查询被标记为derived(衍生)
union:若 第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,最外层select被标记为derived
union result:从union表获得结果的select
3.table:执行的表名
4.type:查询类型,从好到差的排序是system>const>eq_ref>ref>range>index>all,一般来说得保证查询到达range级别,最好ref。
system:表只有一行记录(等于系统表),这是const的特例
const:通过索引一次就找到了,用于比较primary key或者unique索引。如将主键置于where列表中,MySQL就能将该查询转换为一个常量
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或者唯一索引扫描
ref:非唯一性索引扫描,返回匹配某个单独值所有行,本质上也是一种索引访问
range:只检索给定范围的行,使用一个索引来选择行。一般是在where中出现了between、<、>、in等的查询
index:全索引扫描,index和all都是读全表,但是index只遍历索引数,是从索引中读取,而all是从硬盘读取。index通常比all快,因为索引文件通常比数据文件小。
all:全表扫描
5.possible_keys:可能应用到的索引,若查询字段存在索引,则会被列出来,但不一定会真的使用到。
6.key:实际使用的索引,若为null,则没有使用索引。查询中若使用了覆盖索引(覆盖索引是select查询的字段和顺序,跟创建的复合索引字段和顺序一样),则该索引仅出现在key列表中
7.key_len:显示为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。在不失精度的条件下,长度越短越好。
8.ref:显示索引的哪一列被使用了,如果可能的话,是一个常量。哪些列或常量被用于查找索引列上的值
9.rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数。
10.Extra:包含不适合在其他列显示,但十分重要的额外信息
Usring filesort:mysql对数据使用了一个外部的索引排序,不是按照表内的索引顺序进行读取。mysql中无法利用索引完成的排序操作称为“文件排序”。
Using temporary:在对查询结果排序时使用了临时表,常见于排序order by和分组查询group by
Using index:表示相应的select操作中使用了覆盖索引,效率不错!如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
Using where:使用了where过滤
Using join buffer:使用连接缓存
impossible where:where子句的值总是false,不能返回任务数据
四、索引优化
1、索引字段使用范围查询其后面字段索引无效。
2、两表left join查询,在右边关联字段上建索引,这是因为左连接左表一定有,关键点是如何从右表搜索。右连接相反再在左表建索引。
3、如何避免索引失效:
(1)遵守最佳左前缀法则:如果索引了多列(复合索引),查询条件的列从索引的最左前开始并且不跳过索引的列。
(2)
- mysql总结笔记
- MySQL笔记总结
- MySQL 笔记总结
- mysql笔记总结
- MySQL总结笔记1-必知必会
- 学习笔记 (MySQL日志总结) [第九课]
- MySQL学习笔记之命令总结
- MySQL数据库字段的一点总结笔记
- MySQL笔记-外键创建失败总结
- 学习笔记--mysql常用数据类型总结
- 【安全牛学习笔记】mysql注入总结
- mysql学习总结(高性能MySQL笔记)
- mysql学习总结2(高性能MySQL笔记)
- mysql总结3(高性能MySQL笔记)
- 游戏代理VPN(pptp+radius+mysql) 安装笔记总结
- php+mysql+js+ajax总结笔记(不断更新)
- JSP+MySQL+MyEclipse+JavaScript项目开发--总结笔记
- JSP+MySQL+MyEclipse+JavaScript项目开发--总结笔记 .
- 用SpringBoot 做代web理服务器
- 实验五 I/O 模型网络程序实验
- java-DateDemo
- hdu 1595 BFS 记录边+SPFA
- LintCode_112_删除排序链表中的重复元素
- MySQL笔记总结
- Java基础----值交换
- 现代的管理人员素养的需要
- Java基础----接口
- android 解决webView页面双击出现复制剪切等
- LSettingView--- 让你更加快速的实现设置界面
- JVM参数:-XX:CompileCommand
- poj 3321 Apple Tree(树状数组)
- HDU 4006 第K大元素(小技巧)