索引
是一种数据库存放数据的摆放方式(数据结构);
使用索引的目的是为了提高查询数据的效率(是一种用空间/索引占用空间/换时间的方式);
使用索引的 查询效率 提高100万倍 情景
举一个例子,三个表t1、t2、t3,每个表中只有一个字段,但是每一个表中都有1000行记录,这些记录都是1~1000的数字。
执行以下的查找语句mysql>SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3;
在无索引的情况下处理此查询, 必须寻找 3 个表所有的组合,以便得出与 WHERE 子句相配的那些行。而可能的组合数目 为 1000×1000×1000(十亿)
如果对每个表进行索引,就能极大地加速查询进程,利用索引的查询处理如下。
从表 t1 中选择第一行,查看此行所包含的数据。
使用表 t2 上的索引,直接定位 t2 中与 t1 的值匹配的行。同理,利用表 t3 上的索引, 直接定位 t3 中与 t1 的值匹配的行。
扫描表 t1 的下一行并重复前面的过程,直到遍历 t1 中所有的行。
>>标题中的 100万 倍 是 春秋笔法,说明 使用 索引 的功效;
索引根据数据结构来分=>B+Tree索引/Hash索引/R-Tree索引Full-text索引(全文索引),
首先 不同的数据库引擎支持可以用的索引是不完全相同的;
其中B+Tree索引是最常用的索引,InnoDB与MyISAM都支持B+Tree索引
老实说对这种 数据结构 我了解不多,
MySQL在使用上来 区分
普通索引:
唯一索引:具有唯一约束的索引
主键索引:非空且唯一
外键索引:主外键约束的索引,MySQL搭集群的情景 不做这种 主键 关联 别人的外键 的事情;
组合索引:最左前缀
全文索引(这个我专门写过一个随笔>>>> 'MySQL InnoDB引擎 搭配 全文索引 提供 中文模糊查询 数据库版本是MySQL 5.7.6')
用索引提高查询效率
是这样,首先还是写sql,能够完成功能需要这是第一步,
然后再优化 sql 或者 优化 索引
通过 explain 关键字来 查看某条SQL语句的执行方式,type如果是all 代表查询没有走索引,是通过全表扫描的方式执行;
比如:
EXPLAIN
SELECT id,NAME FROM
tb_sku
WHERE MATCH (NAME) AGAINST ('夕阳红 -男款' IN BOOLEAN MODE);
最后
索引是用空间换查询效率 , 如果一张表 会频繁的 写 数据 , 则使用索引影响写的效率