一、存储引擎
Mysql存储引擎,常见的有InnoDB和MyISAM,查看存储引擎的sql语句:
show engines;
查看当前使用的存储引擎的sql语句:
show variables like '%storage_engine%';
InnoDB和MyISAM之间的区别:主外键(MyISAM不支持)、事务(MyISAM不支持)、行表锁(MyISAM支持表锁,InnoDB支持行锁)、缓存(MyISAM只缓存索引不缓存数据,InnoDB不仅缓存索引也缓存数据)、数据文件(MyISAM存储为.frm文件描述表结构,.MYI文件存放索引,.MYD文件存放数据。InnoDB存储为.frm文件描述表结构,.ibd文件存放索引和数据)。
二、sql的书写顺序和内部读取顺序
书写顺序:
select distinct 字段→ from 表名→ join 表名→ on 连接条件→ where 查询条件→ group by 分组字段→ having 分组后条件→ order by 排序→ limit 取的条数
内部读取顺序:
from 表名→ on 连接条件→ join 表名→ where 查询条件→ group by 分组字段→ having 分组后条件→ select distinct 字段→ order by 排序→ limit 取的条数
三、Mysql优化
1、 性能下降的表现
执行时间长,等待时间长。
2、性能下降的原因
(1)查询语句写得不好,使用各种连接和子查询导致索引没用上或者没有创建索引。
(2)建立的索引失效,真正执行时没有用到索引。
(3)服务器调优及个人配置参数导致。
四、 索引
1、索引的基础知识
索引就是一种排好序的数据结构,能帮助MySQL高效地去获取数据。
优势:降低读取成本。
劣势:需要使用空间去存储,降低了增删改的速度。
创建索引的sql语句:
create index 索引名 on 表(索引字段,索引字段);
查看索引的sql语句:
show index from 表名;
删除索引的sql语句:
drop index 索引名 on 表名;
2、索引失效
(1)使用函数导致索引失效。
(2)使用范围条件查询,在它右边的会失效。
(3)使用like’%条件’,会失效。
(4)使用!=会失效。
(5)使用or会失效。
(6)使用is not null会失效。
使用覆盖索引可以解决上面这些索引失效问题,覆盖索引(查询的字段和建立索引的字段刚好吻合)。
五、 EXPLAIN
(1)id:执行顺序,先大后小,相同从上往下。
(2)select_type:查询的类型。
(3)table:使用的表。
(4)partitions:分区。
(5)type:表扫描的方式,例如ALL(全表扫描)。
(6)possilble_key:可能使用到的索引。
(7)key:实际使用到的索引。
(8)key_len: 索引长度,根据它大小可以判断使用了组合索引中的几个。
(9)ref:索引值的情况。
(10)rows:优化的行数。
(11)filtered:满足行数的百分比,越大越好。
(12)Extra:产生的值。