一、什么是索引
如果把数据比作一本书,那么索引就是目录,通过对目录的匹配,快速定位到内容的页码,然后找到我们想要的具体内容。
二、聚簇索引
MySQL的存储结构依次为表空间、段、簇、页、行。簇是由连续的页组成的空间,一个簇有64个页,这些页在物理上和逻辑上都是连续的。
现实生活中什么最符合聚簇索引?很明显字典就是最经典的聚簇索引,不论是目录还是内容,都是按顺序排列的。
三、innoDB的索引是怎么查找的
在innoDB中,分为主键索引和辅助索引,如果我们试用了辅助索引查询,例如name='张三',那么MySQL会首先用name='张三'在叶子节点查询到主键值(一般为id),然后用id的值查询具体的数据。
四、如果没有主键id索引怎么办
1、如果我们定义了其他字段为主键(PRIMARY KEY),那么InnoDB会选择这个字段作为聚集索引。
2、如果没有定义主键,那么InnoDB会选择第一个不包含有NULL值的【唯一索引】作为主键索引。
3、如果这样的唯一索引也没有,那么InnoDB会选择内置6字节长的ROWID作为隐藏的聚集索引,它会随着行记录的写入而主键递增。
五、是不是索引越多越好
MySQL有个词叫做列的离散度,就是这一列的在数据中重复度越高,离散度越低,重复度越低,分子越大,离散度越高。
如果一个表的status只有1和0,那么当MySQL进行索引查询的时候,发现使用索引和全文检索效率基本上一样,干脆就直接全文检索了,那么这个status索引就无用了,还白白占用了空间。