房产网站做那个比较好,坂田杨美企业网站建设,wordpress调用幻灯片,动漫设计好就业吗数据库中的引擎
常用的引擎有InnoDB、MyIsam、Memory三种。
MyIsam#xff1a;组织形式分为三种#xff1a;
frm文件存储表结构、MyData文件存储表中的数据、MyIndex文件存储表的索引数据。是分开存储的。
Memory#xff1a;基于内存的#xff0c;访问速度快#xff0…数据库中的引擎
常用的引擎有InnoDB、MyIsam、Memory三种。
MyIsam组织形式分为三种
frm文件存储表结构、MyData文件存储表中的数据、MyIndex文件存储表的索引数据。是分开存储的。
Memory基于内存的访问速度快但是后面可能用的都是Redis。
重点来说说InnoDB存储引擎吧
MySQL默认的存储引擎DML操作支持事务。一个ibd文件对应一张表嘛。它在一个TableSpace的表空间这样一个逻辑结构中按大小分为段、区、页这样的。一个段有四个区一个区有连续64隔数据页这个数据页就是InnoDB下最基本的数据单位嘛然后数据页的大小是16K数据页里面才是你存的这种行记录它都是往数据页里面放的。
InnoDB有三个特点嘛支持外键、还有事务、还有行级锁这是它的几个特点。
它也是一个组织索引表这一块就跟索引挂钩了嘛它每个节点就是一个数据页。然后根据组织形式又能分为聚集索引和二级索引嘛根据不同的这种索引字段进行组织排放。
它不仅存放表结构、数据。还会存放该表对应的索引信息。
索引
一种用于提高数据库查询性能的有序的数据结构。通过它呢数据库引擎可以快速定位到存储表中的特定数据而不必逐行遍历整个表。 聚集索引和二级索引
在InnoDB存储引擎中根据索引的存储形式分为聚集索引指针和二级索引二级指针
索引结构中叶子结点存放的是整行的行数据。必须有且只有一个。
索引结构中叶子结点存放的是对应的主键。可以有多个。除了聚集索引以外的索引都是二级索引
B树和B树的结点
B树非叶子节点只存储key不存储值直到叶子节点才存储值非叶子节点主要起到索引作用叶子节点包含了所有插入的元素。
B树每个结点即存值又存key我们知道一个数据页大小是16K固定的嘛如果又存节点又存Key就会导致每个节点存储的key的个数少进而导致树的层数很深。这也是不用B树去存储索引的原因。
不用Hash存储索引的原因
不用Hash因为我们数据库查询经常会涉及到范围查询嘛而Hash索引只能做到精确查找不能进行范围查找同时Hash不能对数据进行排序操作。
聚集索引选取规则
如果存在主键主键就是聚集索引。
如果没有设置主键默认第一个唯一索引就是聚集索引。
如果又没有主键又没有唯一索引那么InnoDB会自动生成一个rowid作为隐藏的聚集索引。
对于叶子节点聚集索引存放的是一行的全部信息而二级索引存放的是主键值通常会涉及到回表查询嘛。然后通过主键值再回表
回表查询
先介绍一下聚集索引和二级索引的区别
就是我们查询条件一般是通过二级索引这样拿到了主键值再拿到该主键值再进行一次回表查询。
覆盖索引
查询使用了索引同时返回的列不需要回表查询即一次查询就能全部找到了。如select idname from a where name jack 这里id是主键值name是二级索引通过二级索引查到了id也就是主键值不需要回表查询所以叫做覆盖索引。因此尽量不要使用select *因为这样往往会做到回表查询影响查询性能。
索引失效的场景
用到复合联合索引的时候违反最左前缀法则
【查询的时候必须从索引的最左列开始如果跳过了中间某一列则跳过之后的索引都失效】 当查询条件有范围查询的时候其右边的条件如where id 1 and xxx 【and后面的索引都会失效】
在索引列上进行运算操作
以%开头的模糊查询
隐式类型转换如表中数据是字符串类型而你给他一个int类型即不加单引号索引会失效
索引设计原则
①数据量大且查询比较频繁的表建立索引如果一个表全是增删改的操作就没必要加索引了
②常作为查询条件where、order by、group by操作的字段建立索引如果一次查询条件的字段为多个也可以考虑设置联合索引但记住它们的顺序不能改变要遵守最左配对原则
③选择区分度高的列作为索引像性别男女就没必要。
④如果是字符串类型的字段且长度较长可以针对字段的特点建立前缀索引。
⑤尽量使用联合索引减少单列索引查询时联合索引很多时候可以覆盖索引避免回表提高查询效率。
⑥控制索引的数量索引越多维护索引结构的代价也越大会影响增删改的效率
事务
对于单独的DQL数据查询语句我们一般不会说去考虑事务如果是设计到DDL、DML比如insert、update、delete为了保证操作的原子性即同时成功或同时失败。因为事务是一个不可分割的单元嘛并且如果有的成功执行有的没成功那就会造成很大的问题也因此引入了事务的机制。
四大特性
原子性保证一个事务中的多条操作语句要不同时成功要不同时失败。不会处于中间状态。
一致性事务执行的结果是使数据库从一个状态变到另一个一致性状态。
隔离性涉及到不同的隔离机制数据库中有四种隔离机制读未提交、读已提交、可重复读、串行化。使得每个事务都独立执行嘛。
持久性因为数据最终是要落盘的持久化保存数据嘛。