##什么是索引数据库
索引是一种文件,一种特殊的文件,索引文件中存放整张表全部记录的引用指针,至关于书本的目录。数据库设计
聚簇索引是按照数据存放的物理位置为顺序的性能
非聚簇索引,叶级页指向表中的记录,记录的物理顺序与逻辑顺序没有必然联系测试
聚簇索引相对来讲对于多行索引的性能提升比较大,而非聚簇索引对于单行检索比较快优化
普通索引(INDEX) 最基本的索引,无任何限制,MyISAM中默认BTREE类型索引设计
惟一索引(UNIQUE) 与普通索引相似,但惟一索引的索引列的值必须惟一,容许空值,若为组合索引,列值组合必 须惟一指针
全文索引(FULLTEXT) 仅可用于MyISAM引擎的表,在生成全文索引时数据库将会吧文本中出现的全部单词建立为一 份清单,查询操做将会根据这份清单去检索有关的数据记录,可是对于大容量的数据表,生成 全文索引是一种很是消耗时间与存储空间的作法code
单列索引、多列索引 多个单列索引与与单个多列索引查询效果不一样,执行查询时MySQL只能使用一个索引,会从多 个索引中选择一个限制最为严格的索引排序
组合索引(最左前缀) 组合索引时从最左面开始组合,组成一组组索引,例如索引
ALTER TABLE article ADD INDEX index_time_time(title(50),time(10))
那么此时至关于创建了如下两组索引
SELECT * FROM article WHERE title='测试' AND time=123456789; SELECT * FROM article WHERE title='测试';
不使用上面的索引的查询语句以下
SELECT * FROM article WHERE time=123456789;
索引虽然能提升MySQL的查询速度,可是当咱们进行insert、update、delete等写操做时,速度会有所下降,由于在写数据时一样须要更新保存索引文件。
动做描述 | 使用汇集索引 | 使用非汇集索引 |
---|---|---|
常常被分组排序 | 使用 | 使用 |
返回某一范围内的数据 | 使用 | 不使用 |
一个或极少不一样值 | 不使用 | 不使用 |
小数目的不一样值 | 使用 | 不使用 |
大数目的不一样值 | 不使用 | 使用 |
频繁更新的列 | 不使用 | 使用 |
外键列 | 使用 | 使用 |
主键列 | 使用 | 使用 |
频繁修改索引列 | 不使用 | 使用 |
select * from users where YEAR(adddate)<2007;将在每一个行上进行运算,这将致使索引失效而进行全表扫描,所以咱们能够改为:
select * from users where adddate<’2007-01-01′;关于这一点能够围观:一个单引号引起的MYSQL性能损失
- MySQL将全部数据逻辑存放与ibdata1文件中,该文件也被称为表空间,表空间又划分非段(数据段,索引段,回滚段),每一个段又划分为区,每一个区大小为1M,InnoDB每次最多只能申请4个区,即4M,每一个区分为64页,每页16KB,这个大小是固定的
- InnoDB 是面向行的,也意味着数据行将存放与页中,每页最多7992行