1.SQL优化
-
避免全盘扫描/全局搜索
select * 避免使用
尽量不要用!=,< >
避免在where后使用函数
not in、where like “%X%” (会引起全盘扫描) -
创建索引:
字段中值重复太多,添加索引没有太大必要,
字段占用空间特别大,比如text类型 -
explain查看sql执行计划,是否引起了全盘扫描,是否用到了索引
2.索引
MySQL官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构。
1.索引的类型
-
聚簇索引和非聚簇索引:
聚簇索引:查询速度快,不需要回表
非聚簇索引:查询聚簇索引的位置,再通过聚簇索引查询到具体结果 -
聚簇索引:主键索引(PRIMARY KEY)
- 主键索引:唯一的标识,主键不可重复
-
非聚簇索引:组合索引,普通索引,唯一索引
- 组合索引在使用的时候,需要注意:
多个字段,组合在一起创建出符合索引
最左原则(例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如,age或者(name,age)组合就不会使用索引查询。) - 普通索引:默认的,Index,key关键字来设置,为了查询数据更快一 点。
- 唯一索引:避免重复的列出现,唯一索引可以重复,
- 组合索引在使用的时候,需要注意:
-
全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,快速定位数据
2.索引的结构
B-Tree,B+Tree,Hash
- 有一个字段添加了Hash索引,操作当前Hash索引的字段需要注意什么:
针对Hash索引的字段不要order by
数据量不是特别大时,Hash查询效率要远高于B-Tree,B+Tree - MySQL中使用的索引结构是:B+Tree
B+Tree的叶子节点中,会有一个指针,指向了旁边的叶子节点
3.MySQL常见的数据引擎
InnoDB,MyISam
- InnoDB:支持事务,支持行级锁,也支持表级锁(全盘扫描),查询效率相对较慢,将数据和索引存放在一个文件中
- MyISam:不支持事务,只支持表级锁,查询效率相对较高,将数据和索引分开存放
4.三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前提:满足第一范式
每张表只描述一件事情
第三范式(3NF)
前提:满足第一范式和第二范式
需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关
* 百度网盘倍速播放
videojs.getPlayers(“video-player”).html5player.tech_.setPlaybackRate(1.5)