索引之单列索引和组合索引

前几天老大叫我做了下索引优化,故将学到的东西记录下来。

1)单列索引就不多说了,不设限制的唯一索引,值唯一的唯一索引,一个表一个非空的主键索引

2)组合索引

组合索引,多个列组合的索引。重点是理解最左前缀的原则。

最左前缀

若有组合索引(a,b,c),那么根据最左前缀,数据库成立了三个索引(a)(a,b)(a,b,c),

重点:

这里可以看出n个列的组合索引,实际新建的普通

索引是n个,

索引的列数是n(n+1)/2列,即高斯求和

大小是n*a*a.length+(n-1)*b*b.lengtn+....+1*n*n.length。

3)优化

有了上面的重点,那么建立索引的基本要求就有了。

1.索引的大小应该小于数据表的大小

因为,每个数据不一定用的是最大的长度,而且建立索引的时间高于插入数据,实际上通常满足索引的列数小于数据库的列数,就能确保索引的大小应该小于数据表的大小。当然,具体公司具体分析,像淘宝的数据服务器估计为了查询速度,索引大小应该远高于数据表大小。

2.组合索引第一个不应该包含单列索引

原因,重复。(学名组合索引的前导索引/前导列)

3.创建索引时,若一些用于模糊查询的可以只截前面一段,用于查询

优化索引创建时间,索引大小等

4)注意点

1.操作:order by,where,join,查询条件:数据库只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引

2.以通配符%和_开头作查询时,MySQL不会使用索引

3.索引不会包含有NULL值的列

4.在索引列上进行数学操作会变成全表查询

5.不用NOT IN和<>操作,想想就明白,这两个操作下的查询效率和全表查询差不多。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

SQL Server优化之SQL语句优化

2. ON: 对vt1表应用ON筛选器只有满足 join_condition 为真的行才被插入vt2

25820
来自专栏电光石火

SQL 性能调优

我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优...

31960
来自专栏Ryan Miao

group by 和聚合函数

group by 的基本用法                                                                  ...

315110
来自专栏数据之美

explain 深入剖析 MySQL 索引及其性能优化指南

0.SQL标准的执行流程(select) (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_...

35260
来自专栏java达人

mysql explain详解

对于经常使用mysql的兄弟们,对explain一定不会陌生。当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供...

194100
来自专栏乐沙弥的世界

高效SQL语句必杀技

        No SQL,No cost. SQL语句是造成数据库开销最大的部分。而不良SQL写法直接导致数据库系统性能下降的情形比比皆是。那么如何才能称得...

10020
来自专栏数据库

Java SQL语句优化经验

. (1) 选择最有效率的表名顺序(只在基于规则的seo/' target='_blank'>优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FR...

35490
来自专栏算法channel

SQL|语句执行逻辑

01 SQL SQL,脚本查询语言,处理代码的顺序不是按照脚本语言的顺序,这点是不同于其他编程语言的最明显特征。 SQL语言常见的比如,Mysql,HiveQ...

38070
来自专栏从ORACLE起航,领略精彩的IT技术。

Oracle之SQL优化专题01-查看SQL执行计划的方法3.1 dbms_xplan.display_cursor(null,null,'allstats last')3.2 dbms_xplan.

51450
来自专栏令仔很忙

令仔学MySql系列(一)----explain详解

explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。下面是一个例子:

7810

扫码关注云+社区

领取腾讯云代金券