1.学习MySQL,我们学习什么?
(1)SQL基本语法
操作方面
insert
update
delete
查询方面:
select
优化方面:
explain
(2)开发、优化以及管理
开发方面:
存储引擎
字符集
数据类型
优化方面:
索引
事务
锁
(3)引用资料
正文
(2)开发、优化以及管理
开发方面:
存储引擎
目前只关注:MyISAM以及InnoDB
基本介绍:
(i)MyISAM:默认存储引擎,查询快,无存储上限,表锁
附注:每个MyISAM存储成三个文件:表定义、存储数据、存储索引,平均IO,可以获取更快速度。
(ii)InnoDB:具备事务安全,数据处理慢,行锁(效率更低)
数据类型
数据类型不能一概而论,需要根据存储引擎来。
最重要的两个数据类型比较:
char varchar :
MyISAM:固定长度代替可变长度
Memory:都是固定长度
InnoDB:建议使用可变长度
text blob
建议:(1)在不必要的时候避免检索大型的BLOB或者TEXT值
(2)把text或者BLOB分离到单独的表中
浮点数 定点数
注意:存在float不精确的问题,使用需要注意
字符集
字符集(存储)和校对(比较字符串)规则
关于字符集的设置:
此处暂略
优化方面
(1)索引
什么是索引?为什么要用索引?怎么使用索引?
1.为什么使用索引?提高select操作性能。
2.怎么使用索引?
设计原则:
(1)使用唯一索引。反之:重复性高,索引性能越发低下
(2)使用短索引。例子:如列orderNo为200个字符,但是前十位已经是多数值唯一,那么索引仅到10为止。
(3)利用最左前缀。
(4)不要过度索引。因为:i)占用磁盘空间;ii)增加写操作性能损耗。
(5)索引建立应该在where列。
如何优化?
1.show status 获取session级别的统计结果和global级别的统计结果。可以了解该数据库是以插入为主还是以查询为主。
2.定位执行效率比较低的SQL语句。
(1)可以通过慢查询日志定位那些执行效率较低的sql语句。
(2)通过explain分析低效SQL的执行计划
explain后一些字段的备注:
a) table:输出结果集的表
b) type 表示表的连接类型
System 最佳的连接类型
All 连接没有使用索引时,全表扫描
ref 使用索引进行表连接时type的值为ref
c)key 表示使用的索引
d) key_len 索引长度
e) rows 扫描范围
f ) extra 执行情况的说明和描述
(3)查看索引的使用情况:show status like 'Handler_read%';
(4)确定问题,采取优化。
优化方法:
i) ANALYZE TABEL
ii)CHECK TABLE
iii) CHECKSUM TABLE
IV)使用optimize table
一般出现添加了索引但是效率没有提高的原因:
(1)MySQL本身会做一个判断,如果它预估使用索引会慢于全表搜索,他就拒绝用索引。
(2)条件有or,即使其中有条件带索引也不会使用
(3)如果多列索引,不使用第一部分,则不会使用索引,比如(user_name,age,city)作为一个组合索引,如果不使用user_name作为索引开头,则不用索引
(4)like查询是以%开头
(5)如果列类型是字符串,则一定要在条件上添加引号,否则不适用索引