暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL灵魂十问

小源学源码 2019-10-12
329

1.索引的目的是什么?

 

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


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


  • 加速表和表之间的连接


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

 

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

 

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

 

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

 

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

     

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

 

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

 

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


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

 

5.优化数据库的方法

 

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

 

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

 

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

 

  • 事务处理

 

  • 锁定表、优化事务处理

 

  • 适用外键,优化锁定表

 

  • 建立索引


  • 优化查询语句

 

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

 

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

 

  • EXISTS替代IN、用NOT EXISTS替代NOT IN

 

 避免在索引列上使用计算

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

8.范式化设计优缺点?

 

优点:

 

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

 

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

 

反范式化:

 

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

 

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

 

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

 

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


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


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

10.锁的优化策略

 

读写分离


分段加锁


减少锁持有的时间


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


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


文章转载自小源学源码,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论