MySQL
索引
是一种数据结构
查询效率获得提高
MyISAM:
B+树
数据和索引分离
由三个文件组成
frm 存放创建的表的基础信息
myi 索引
myd 数据
数据存储,随意存储,离散程度大,即非聚集索引
即MyISAM都是非聚集索引
主索引:索引值不重复的索引都可以叫主索引
辅助索引:存储的是数据的地址,允许索引值重复
InnoDB
B+树
数据和索引结合,把索引当成数据的一部分
1、数据的存放依赖索引
1、主键 主键索引 主索引
2、唯一键 唯一索引 主索引
主索引:存放数据的索引,不允许索引值重复
3、添加一个隐藏字段 6个字节 主索引
叶子节点不能存储完整的数据,所以其存储的是主索引的索引值
存储数据的索引叫主索引,其他的都叫辅助索引(叶子节点)
辅助索引查询两次:
第一次辅助索引找到主索引的索引值
第二次主索引找到数据
索引的建立能提高效率 能在其他字段上建立索引
为什么不自动建立:
索引是一个数据结构,占空间和其他资源
空间换时间的概率
索引的优化:
1、什么时候建立索引
1、经常用于查询的字段
2、主键的字段
3、用于两表连接的字段 e.g.:where
4、经常用于排序查询的字段
2、什么时候不应该建立
1、不经常用于查询的字段
2、数值较少的字段
3、text,BLOB类型等的字段,数值太大了,I/O效率低
4、修改性能大于查询性能 insert密集型 排序
索引的分类
索引建立时,字段的特性
1、普通索引
1、create index index_name on tbname(field_name);
2、alter table tbname add index index_name on field_name;
3、建表的过程中
index index_name(field_name);
2、主键索引
3、唯一索引
4、全文索引(一般情况不建议用)
非叶子节点的索引值都是text字段的数值
数值太大了,索引结构庞大
I/O效率低
5、单列索引
6、组合索引(属于多列索引)
最左前缀原则,从最左边开始包含
索引的注意事项:
1、包含NULL的列
2、使用短索引 提高I/O效率
3、like语句的操作,模糊匹配,不会用到索引