标签:from https 关系 查找 空间 sql 创建组 基本 假设
创建索引前会先排序,会影响where和order by的效率。
索引也是一张表,保存了主键和索引字段和指向实体表的记录,也是要占空间的,以索引文件的形式存储在磁盘。
增删改数据时,索引指向也要改变,所以会慢,需要频繁删改的字段不适合建索引。
索引的建立也需要不断的优化、调整。
1、创建,两种写法 CREATE [UNIQUE] INDEX 索引名 ON 表(列1,列2); 主键索引:ALTER TABLE 表 ADD PRIMARY KEY (列); #添加一个主键,索引值必须唯一,不能为null 唯一索引:ALTER TABLE 表 ADD UNIQUE 索引名(列1,列2); #索引列的值必须唯一,可为null,null可出现多次 单值索引:一个索引只包含单个列,一个表可以有多个单列索引 复合索引:ALTER TABLE 表 ADD INDEX 索引名(列1,列2); #普通索引,索引值可出现多次 *全文索引:ALTER TABLE 表 ADD FULLTEXT 索引名(列); 2、删除 DROP INDEX 索引名 ON TABLE; 3、查看 SHOW INDEX FROM 表;
1、Btree
2、Hash索引
3、full-text全文索引
4、R-tree索引
【Btree检索原理】
树的高度表示最多要查找的次数,广度越广,深度越小查找次数越少
B+Tree所有索引数据都在叶子结点上
1、开启慢查询日志,设置超过几秒为慢SQL,抓取慢SQL
2、通过explain对慢SQL分析(重点)
3、show profile查询SQL在Mysql服务器里的执行细节和生命周期情况(重点)
4、对数据库服务器的参数调优
接下来几章节对这四步进行总结。
哪些情况最好建:
①主键会自动建立唯一索引
②查询中与其他表关联的字段,外键关系建立索引
③频繁作为查询条件的字段应该创建索引
④查询或排序后的字段顺序最好和索引一致
⑤单值/组合索引的选择问题,在高并发下倾向创建组合索引
⑥查询中统计或者分组字段
哪些情况最好不建:
①表记录太少
②经常增删改的表,因为更新表时,不仅要保存数据,还要保存索引文件。
③如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果,只为最经常查询和最经常排序的数据建立索引。
④数据所占空间过大的字段不应建索引,空间占的多,会导致树的深度变大
(IO次数取决于b+树的高度h,假设当前数据表的数据为N,每个磁盘块数据项数量是m = 磁盘块的大小/数据项的大小,磁盘块的大小是固定,如果数据项占的空间越小,每个磁盘块数据项数量越多,也即每层能容纳更多数量的数据,树高度越低。)
⑤WHERE条件里用不到的字段不创建索引
⑥频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引
参考链接:https://www.cnblogs.com/ManyQian/p/9076247.html#_label2
标签:from https 关系 查找 空间 sql 创建组 基本 假设
原文地址:https://www.cnblogs.com/zjxiang/p/9142111.html