索引练习.note

文档:索引练习.note
链接:http://note.youdao.com/noteshare?id=0b8ffe8c8d924a422ad23a44cfc348d5&sub=BC1DEFF842A44031B47404F220CD3CE0

索引

是一个单独的、存储在磁盘上的数据库结构,它 们包含着对数据表里所有记录的引用指针

MySQL 中索引的存储类型有两种: BTREE 和 HASH, 具体和表的存储引擎相关;
MyISAM 和InnoDB 存储引擎只支持BTREE 索引; MEMORY/HEAP 存储引擎可以支持 HASH
和 BTREE 索引。

索引的优点主要有以下几条:
通过创建唯一索引, 可以保证数据库表中每一行数据的唯一性。
可以大大加快数据的查询速度, 这也是创建索引的最主要的原因。
在实现数据的参考完整性方面, 可以加速表和表之间的连接。
在使用分组和排序子句进行数据查询时, 也可以显著减少查询中分组和排序的时间。

增加索引也有许多不利,主要表现在如下几个方面:
创建索引和维护索引要耗费时间, 并且随着数据量的增加所耗费的时间也会增加。
索引需要占磁盘空间, 除了数据表占数据空间之外, 每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
当对表中的数据进行增加、删除和修改的时候, 索引也要动态地维护, 这样就降低了数据的维护速度。

索引的分类

1.普通索引和唯—索引

2.单列索引和组合索引

3.全文索引

4.空间索引

索引的设计原则
索引并非越多越好
避免对经常更新的表进行过多的索引
数据量小的表最好不要使用索引
在条件表达式中经常用到的不同值较多的列上建立索引, 在不同值很少的列上不要建立索引
当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引需能确保定义的列的数据完整性,以提高查询速度
在频繁进行排序或分组(即进行group by 或 order by 操作)的列上建立索引

create index index_1 on by_his_user(USER_NAME);

EXPLA 语句输出结果的各个行解释如下:

(1)select_type 行指定所使用的SELECT查询类型,这里值为SIMPLE, 表示简单的SELECT,
不使用UNION 或子查询。其他可能的取值有: PRIMARY、UNION、SUBQUERY 等。
(2)table 行指定数据库读取的数据表的名字, 它们按被读取的先后顺序排列。
(3)type 行指定了本数据表与其他数据表之间的 关联关系, 可能的取值有 system、const、
eq_ref、 ref、 range、 index 和 All。
(4)possible_keys 行给出了 MySQL 在搜索数据记录时可选用的各个索引。
(5)key 行是 MySQL 实际选用的索引。
(6)key—len 行给出索引 按字节计算的长度, ke y_len 数值越小, 表示越快。
(7)ref 行给出了关联关系中另 一个数据表里的数据列的名字。
(8)rows 行是 MySQL 在执行这个查询时预计会从这个数据表里读出的数据行的个数。
extra 行提供了与关联操作有关的信息

性能下降SQL慢,执行时间长,等待时间长:
查询语句写的烂
索引失效???
关联查询太多join
服务器调优及各个参数设置

join

left join
right join
inner join
left join on where b.XXX is null
right join on where a.XXX is null
full outer join
full outer join where a.XXX is null or b.XXX is null

おすすめ

転載: blog.csdn.net/weixin_39472101/article/details/120371448