您的位置:首页 > 数据库

数据库灵魂10问

2019-10-12 17:13 225 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/BORRISEE6/article/details/102524166

1.索引的目的是什么?

 

快速访问数据表中的特定信息,提高检索速度

 

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

 

加速表和表之间的连接

 

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

 

2.索引对数据库系统的负面影响是什么?

 

创建索引和维护索引需要耗费时间,索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

 

3.为数据表建立索引的原则有哪些?

 

在最频繁使用的、用以缩小查询范围的字段上建立索引。

 

在频繁使用的、需要排序的字段上建立索引

 

4.什么情况下不宜建立索引?

 

对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。

 

对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等

 

5.优化数据库的方法

 

选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM

 

使用连接(JOIN)来代替子查询

 

适用联合(UNION)来代替手动创建的临时表

 

事务处理

 

锁定表、优化事务处理

 

适用外键,优化锁定表

 

建立索引

优化查询语句

 

6说说对SQL语句优化有哪些方法?(选择几条)

 

Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。

 

用EXISTS替代IN、用NOT EXISTS替代NOT IN。

 

 避免在索引列上使用计算

 

避免在索引列上使用IS NULL和IS NOT NULL

 

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

 

应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

 

应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

 

7.如何通俗地理解三个范式?

 

答:第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

 

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

 

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。

 

8.范式化设计优缺点?

 

优点:

 

可以尽量得减少数据冗余,使得更新快,体积小

 

缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化

 

反范式化:

 

优点:可以减少表得关联,可以更好得进行索引优化

 

缺点:数据冗余以及数据异常,数据得修改需要更多的成本

 

9.什么情况下设置了索引但无法使用

 

以“%”开头的LIKE语句,模糊匹配

 

OR语句前后没有同时使用索引

 

 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

 

10.锁的优化策略

 

读写分离

 

分段加锁

 

减少锁持有的时间

 

多个线程尽量以相同的顺序去获取资源

 

不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: