数据库灵魂10问

本文深入探讨了数据库优化的关键策略,包括索引的合理运用、SQL语句优化技巧、理解数据库范式及其影响,以及锁的优化策略。文章还讨论了索引的创建原则和特殊情况下的无效性,旨在帮助读者提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.锁的优化策略

 

读写分离

 

分段加锁

 

减少锁持有的时间

 

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值