1.存储引擎

CSV

不能定义没有索引,列定义必须为 not null,不能设置自增列,所以不适用于大表或者在线处理
注:在编辑完.csv文件之后,用 fulsh table *命令来刷新数据
应用场景:快速导入导出

Archive

压缩文件,有.arz、.idb
只允许insert和select两种操作;只允许自增id列建立索引;行级锁;不支持事物;数据占用磁盘少
应用场景:日志系统、大量的设备数据采集

Memory、heap

数据都在内存里,IO效率要比其他引擎高很多,服务器重启数据会丢失,内存数据表默认只有16M
特点:支持hash索引,B tree索引,默认hash
字段长度都是固定长度varchar(32)=char(32)
不支持大数据存储类型如blog、text
表级锁
应用场景:等值查找热度较高数据
查询结果内存中计算,大多数都是采用这种存储引擎作为临时表存储计算的数据

MyISAM

5.5之前是默认的存储引擎,系统的一些临时表也会用到该引擎
特点:select count(*) from table,无需进行数据的扫描
数据(MYD)和索引(MYI)分开存储
表级锁
不支持事务
应用场景:多用于查询操作

Innodb

5.5之后为默认的存储引擎
特点:支持事务ACID、行级锁、聚集索引方式来存储数据、支持外键

2.查询执行的路劲

1.通过通过协议,与服务端进行连接
2.查询缓存,有,则直接返回
3.进行解析,最终会解析成一个树
4.预处理:校验解析树的合发性以及相关权限
5.查询优化器:会得到一个最优的执行计划
6.通过执行引起API调用存储引擎,最终得到数据

客户端->cache->parse(解析器)->preprocessor(预处理器)->optimizer(优化器)->execution plans(执行计划)->executor(执行器)->stroge engines(存储引擎)-. return data

3.常见命令

1.查看命令 show full processlist、show processlist
sleep:等待客户端发送数据
query:正在查询数据
locked:等待表锁的释放
sorting result:对结果进行排序
sengding data:返回数据
注:如果出现有问题的连接,可以用 kill {id}的方式进行杀掉

2.查看缓存参数 show variables like ‘query_cache%’
设置缓存开启开关:set global query_cache_type = [0,1,2]
注:0:关闭;1:开启;2:按需开启(sql里需要加SQL_CACHE)
查看缓存相关的一些信息,如果命中次数:show status like ‘Qcache%’

注:那缓存什么时候失效呢?
缓存(cache)在5.7的时候默认是关闭的,因为太鸡肋了
一般只要这张表有一丁点的改动,关于这张表所有的缓存信息都会失效
1.sql查询语句有点点改动,比如多一个空格,会失效
2.数据发生变化,比如增删改,也会造成失效

哪些情况不会将数据加入缓存呢?
使用关键字‘sql_no_cache’、一些函数curdate()、查询表不涉及表select 1,、查询的是系统表、查询的数据超过了单次返回的limit

执行计划-key,结果好坏依次:system>const>eq_ref>ref>range>index>all
执行计划-extra:using filesort->外部文件内容进行排序,而不是内部的索引、using temporary->使用临时表保存中间结果,常见于order by或group by、using index->使用了覆盖索引,效率高、using where->使用了where过滤条件、select tables optimized away->索引优化max/min/count

3.查看慢查询日志 show variables like ‘slow_query_log’,如果开启,可以看到其文件放置的地方
设置慢查询开关 set global slow_query_log=[on,off]
设置没有使用索引的查询计入到慢sql中 set global log_queries_not_using_index = on
设置查询超过多少时间记录到慢sql中,单位s set global long_query_time = 0.01