存储引擎基于表,常用引擎InnoDB,MyISAM,Memory等
操作系统一次取一页的数据,4k===================>局部性原理
InnoDB一页的大小16kb
表结构
一行长度不能大于65535
一页大小16384/1024 16kb
COMPACT:处理行溢出的时候会处理,会存储部分真实数据+记录下一页的地址
Dynamic:处理行溢出时,只记录真实数据存储在其他页的地址
组织方式不同
InnoDB:聚集 插入操作会根据主键进行排序
MyISAM:堆表
B+tree:叶子结点用指针连起来
聚集索引:主键和数据在一起
B+tree树索引使用:全值索引,匹配左半边,
如果走索引:辅助索引成本+回表查询
创建索引的时候:索引选择性越大越好 选择性=基数/记录数,越接近一越好
创建索引的时候:前缀索引 缺点:不能使用orderby,groupby,也不能使用覆盖索引
打开优化器,可以查看condition_processing查看优化过程
I/O:InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载 到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。
读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。
MySQL为每个表维护了一系列的统计信息, SHOW TABLE STATUS 语句来查看表的统计信息。 SHOW TABLE STATUS LIKE 'titles';
索引不存放null值,sql语句更改优化器指定使用索引