索引:一种排好序的快速查询的数据结构,用于排序和查询。索引是独立于数据的数据结构,占具了一定的物理存储,并会经常的性维护自身的数据。我们平常所说的索引,如果没有特别指明,都是指BTree(不一定是二叉树)结构的索引。
索引优势:查询和排序
索引的劣势:1.占具了一定的存储空间 2.对表的Insert,update,delete都要维护索引表 3.数据量大的表要花时间来研究建立最优秀的索引
mysql索引结构:BTree , R-Tree ,full-text 全文索引 ,Hash索引。默认使用BTree索引
mysql索引分类:单值索引 , 唯一索引 , 复合索引
create [unique] index indexName on table(columname(length));
drop index indexName on table
show index from table
创建索引建议:
- 一张表索引不超过5个
- 在where 及 order by 涉及的列上考虑建立索引
- 主键会自动建立唯一索引
- 频繁作为查询条件的字段应该建立索引
- 查询中与其它表关联的字段,外键关系建立索引
- 单值/复合索引的选择问题--在高并发下倾向创建组合索引
- 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组的字段建立索引
不建索引情况:
- 频繁更新的字段不适合创建索引
- where条件里用不到的字段不用索引
- 表中数据量少的不必创建索引,mysql官方说数据量到500万的情况下性能开始下降。
- 数据重复且分布平均的表字段不用索引,只为最经常查询和最经常排序的数据列建立索引。如果某列重复的内容太多,为其建立索引没有太大效果