基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
面试官问,MySQL建索引需要遵循哪些原则呢?
面试官问,MySQL建索引需要遵循哪些原则呢?
阅读
1
2020-03-06
1.选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。
2.为经常需要排序、分组和联合操作的字段建立索引
经常需要
ORDER
BY
、
GROUP
BY
、
DISTINCT
和
UNION
等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
3.为常作为查询条件的字段建立索引
如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
4.限制索引的数目
索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。
5.尽量使用数据量少的索引
如果索引的值很长,那么查询的速度会受到影响。例如,对一个
CHAR
(
100
)类型的字段进行全文检索需要的时间肯定要比对
CHAR
(
10
)类型的字段需要的时间要多。
6.尽量使用前缀来索引
如果索引字段的值很长,最好使用值的前缀来索引。例如,
TEXT
和
BLOG
类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
7.删除不再使用或者很少使用的索引
表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
8.最左前缀匹配原则,非常重要的原则。
mysql
会一直向右匹配直到遇到范围查询(&
gt
;、&
lt
;、
between
、
like
)就停止匹配,比如
a
1
=””
and
=””
b
=”
2
”
c
=”“&
gt
;
3
and
d
=
4
如果建立(
a
,
b
,
c
,
d
)顺序的索引,
d
是用不到索引的,如果建立(
a
,
b
,
d
,
c
)的索引则都可以用到,
a
,
b
,
d
的顺序可以任意调整。
9.=和in可以乱序。
比如
a
=
1
and
b
=
2
and
c
=
3
建立(
a
,
b
,
c
)索引可以任意顺序,
mysql
的查询优化器会帮你优化成索引可以识别的形式
10.尽量选择区分度高的列作为索引。
区分度的公式是
count
(
distinct
col
)/
count
(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是
1
,而一些状态、性别字段可能在大数据面前区分度就 是
0
,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要
join
的字段我们都要求是
0
.
1
以上,即平均
1
条扫描
10
条 记录
11.索引列不能参与计算,保持列“干净”。
比如
from
_
unixtime
(
create
_
time
) = ’
2014
-
05
-
29
’就不能使用到索引,原因很简单,
b
树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本 太大。所以语句应该写成
create
_
time
=
unix
_
timestamp
(’
2014
-
05
-
29
’);
12.尽量的扩展索引,不要新建索引。
比如表中已经有
a
的索引,现在要加(
a
,
b
)的索引,那么只需要修改原来的索引即可
注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。
来源:
https
://
blog
.
csdn
.
net
/
u013412790
/
最近五期
【
52
期】记一道简单的
Java
面试题,但答错率很高!
【
53
期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
【
54
期】
Java
序列化三连问,是什么?为什么需要?如何实现?
【
55
期】面试中经常被问到
Java
引用类型原理,带你深入剖析
【
56
期】你说你熟悉并发编程,那么你说说
Java
锁有哪些种类,以及区别
? ~
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别
下一篇:
盘点那些面试中最常问的MySQL问题,第一弹!
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目