郑州搭建网站,利用分类信息网站做推广,图库网站cms,遂宁模板建站公司mysql的存储引擎三种存储方式**InnoDB **(默认)一个文件存储表结构#xff0c;一个存储数据和目录(索引)# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写# 另一个文件(数据 目录)# | 倚天屠龙记 | egon | 北京工业地雷出版社 | 70.00 | 2019-07…mysql的存储引擎三种存储方式**InnoDB **(默认)一个文件存储表结构一个存储数据和目录(索引)# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写# 另一个文件(数据 目录)# | 倚天屠龙记 | egon | 北京工业地雷出版社 | 70.00 | 2019-07-01 |# | 九阳神功 | alex | 人民音乐不好听出版社 | 5.00 | 2018-07-04 |# | 降龙十巴掌 | egon | 知识产权没有用出版社 | 20.00 | 2019-07-05 |# | 葵花宝典 | yuan | 知识产权没有用出版社 | 33.00 | 2019-08-02 |# | 彭于晏的枕边故事 | 彭于晏 | py26期出版社 | 80.00 | 2020-10-30 |memory一个文件存储数据结构数据存储在内存(差的快早期都是这种存储方式现在有redis了)MyIsam一个文件表结构一个存储数据还有一个放目录(索引)# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写# 另一个文件(数据)# 另一个文件(目录)数据库中数据的存储方式实际的数据库中数据的存储方式平衡树 balance tree b-treeb树 :能够更好的降低树的高度,并且对范围查询比较友好myisam/innodb存储引擎 : 索引结构都是通过b树实现的每一个字段都可以创建索引对于一个字段创建的索引在当前字段作为条件的时候可以起到加速作用索引分两类 :# 聚集索引(聚簇索引) :数据和索引存在一颗树上# 辅助索引(非聚集索引/非聚簇索引) :数据和索引不存在一颗树上你必须要在innodb中的所有表都要主动创建主键,主键就是最好的索引myisam和innodb在索引上的不同# myisam中所有的索引都是辅助索引# innodb中主键是聚集索引,其他都是辅助索引平衡树用到平衡树的算法会算取中间范围让树不会成为歪脖树。所以每次添加索引需要时间长点他在构造以索引为主的平衡树B树B树就是平衡树的升级版将各个节点也可以链式连接起来这样查找的时候(20 between 70)就不用回到起点从新查找。就可以纵向查找了索引索引的优点 : 加速查询效率索引的缺点 : 拖慢写的速度,占用更多的硬盘(解决办法分布式读写分离)# create index 索引名 on 表名(字段名);# create index ind_id on s1(id);# drop index 索引名 on 表名;# drop index ind_id on s1;# 查看# show create table s1;正确的使用索引这里说一下mysql只能命中一个索引当你创建多个索引的时候他在执行语句时会先走分析器分析使用什么索引最快就是平衡树结构更健康。如果你想看mysql分析结果。在查询语句前加上explain# 1.对哪个字段创建了索引,条件就使用那个字段# 2.条件列不能参与计算,不能调用函数# 3.如果列中重复值多,那么不适合创建索引(性别)(1/10)# 4.尽量不使用范围查询,范围越小效率越高# 5.使用like a%# 6.and 相连的多个条件 如果有一个索引都可以被命中# 7.or 相连的多个条件 必须都有索引才能命中# 8.联合索引和最左前缀原则(不能使用范围,从使用了范围的那个字段之后的所有条件都无法命中索引,条件之间只能用and不能用or)# create index mix_ind on s1(id,email,name);# 可以命中索引# select * from s1 where id 2000000 and emaileva2000000oldboy and nameeva;# select * from s1 where id 2000000 and nameeva;# select * from s1 where id 2000000 and emaileva2000000oldboy;# select * from s1 where id 2000000;# 2000000 eva jingliyangxxx# 不能命中索引# select * from s1 where emaileva2000000oldboy;# select * from s1 where nameeva;# select * from s1 where id 1000000 and email like eva2000000oldboy;联合索引就是用多个字段当索引以主键为第一个(id)开始分大小id分完按照下一个email开始分进行排序形成树索引合并意思是创建的时候是2个单独的索引但是在使用的时候临时合并成一个。以下是查看mysql分析查看的结果Mysql把2个独立的索引合并成了一个使用为了更快捷的查看以下图片中的语句。索引覆盖Using Index的意思是“覆盖索引”它是使上面sql性能提升的关键一个包含查询所需字段的索引称为“覆盖索引”MySQL只需要通过索引就可以返回查询所需要的数据而不必在查到索引之后进行回表操作减少IO提高了效率以下例子上图首先我们要知道。innodb中主键是聚集索引,其他都是辅助索引加入上表不是以id为主键的表所以id是辅助索引当你查询的时候需要通过id找到主键在从聚集索引中查找在辅助索引中找到的主键此时需要回表。而我查询的只是索引。不需要回表因为已经查到了。这就是索引覆盖MySQL只需要通过索引就可以返回查询所需要的数据而不必在查到索引之后进行回表操作减少IO提高了效率