百度大厂Java面试题:sql 优化有哪些?如何创建索引?创建索引的原则?索引的优缺点?

admin 09-23 架构师 暂无评论
仰慕大厂,收集整理了一些大厂的面试题,恶补。

题目1、sql 优化有哪些?如何创建索引?创建索引的原则?索引的优缺点?


sql 的优化有:


尽量避免使用 select * ,返回无用的字段会降低效率。优化方式:只能使用具体的字段代替,  select 具体字段,只返回使用到的字段。


尽量避免使用 in 和 not in,会导致数据库引擎放弃索引进行全表扫描。优化方式:如果是连续数值,可以用 betwween 代替,如果是子查询,可以用 exists代替。


尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。优化方式:尽量在字段后面使用模糊查询。


尽量避免进行 null 值的判断,会导致数据库引擎放弃索引进行全表扫描。优化方式:可以给字段添加默认值 0,对 0 值进行判断。


如何创建索引:

数据库索引,是数据库管理系统中一个排序的数据结构,索引的实现通常使用 B树及其变种 B+树。


创建索引有两种:

直接创建索引,例如使用 CREATE INDEX 语句或者使用创建索引向导。

间接创建索引,例如在表中定义主键约束或者唯一性键约束时,同时也创建了索引。


索引的作用:


协助快速查询、更新数据库表中数据。


为表设置索引要付出代价的:


一是增加了数据库的存储空间;二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。


创建索引可以大大提高系统的性能(优点):


通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。


可以大大加快数据的检索速度,这也是创建索引的最主要的原因。


可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。


在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。


通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。


增加索引也有许多不利的方面(缺点):


创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。


索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。


当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。


创建索引的原则:


最左前缀匹配原则(一直向右匹配直到遇到范围查询就停止匹配);= 和 in 可以乱序(建立索引是可以任意顺序的,mysql 的查询优化器会帮你优化成索引可以识别的形式);


尽量选择区分度高的列作为索引(区分度的公式是 count(distinctcol)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是 1,);


索引列不能参与计算(保持列“干净”,);


尽量的扩展索引,不要新建索引(如 a->(a,b)只需要修改原来的索引);


选择唯一性索引(唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。);


为经常需要排序、分组和联合操作的字段建立索引;


为常作为查询条件的字段建立索引;


限制索引的数目;


尽量使用数据量少的索引;


尽量使用前缀来索引;


删除不再使用或者很少使用的索引。


 

转载请注明来自一个开发者的工作笔记——荷兰男孩的博客,本文标题:《百度大厂Java面试题:sql 优化有哪些?如何创建索引?创建索引的原则?索引的优缺点?》

喜欢( ) 发布评论

分享到:

第1章:JVM整体架构与调优参数说明【转载学习】 返回列表