美文网首页
数据库面试题

数据库面试题

作者: 暑水 | 来源:发表于2019-08-20 13:46 被阅读0次

    问题集:https://blog.csdn.net/qq_22222499/article/details/79060495

    1、msyql优化经验

    1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
    2、应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
    3、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
    4、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
    5、避免频繁创建和删除临时表,以减少系统表资源的消耗。诸如此类,等等等等.

    2、四种隔离级别

    https://blog.csdn.net/tolcf/article/details/49283575
    读未提交Read uncommitted,
    读已提交Read committed,
    可重复读Repeatable read,
    可串行化Serializable。
    • 串行化(Serializable):所有事务一个接着一个的执行,这样可以避免幻读(phantom read),对于基于锁来实现并发控制的数
    据库来说,串行化要求在执行范围查询的时候,需要获取范围锁,如果不是基于锁实现并发控制的数据库,则检查到有违反
    串行操作的事务时,需回滚该事务。
    • 可重复读(Repeated Read):所有被Select获取的数据都不能被修改,这样就可以避免一个事务前后读取不一致的情况。但
    是没有办法控制幻读,因为这个时候其他事务不能更改所选的数据,但是可以增加数据,因为强恶意事务没有范围锁。
    (不可重复读的重点是修改,幻读的重点在于新增或者删除。)
    • 读已提交(Read Committed):被读取的数据可以被其他事务修改,这样可能导致不可重复读。也就是说,事务读取的时候
    获取读锁,但是在读完之后立即释放(不需要等事务结束),而写锁则是事务提交之后才释放,释放读锁之后,就可能被其他
    事务修改数据。改等级也是SQL Server默认的隔离等级
    • 读未提交(Read Uncommitted):最低的隔离等级,允许其他事务看到没有提交的数据。

    3、MyISAM与InnoDB的区别

    https://www.jb51.net/article/62457.htm##1
    https://www.cnblogs.com/zhangjinghe/p/7599988.html
    一般来说,MyISAM适合:
    (1)做很多count 的计算;
    (2)插入不频繁,查询非常频繁;
    (3)没有事务。

    InnoDB适合:
    (1)可靠性要求比较高,或者要求事务;
    (2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建。

    数据库常见死锁原因及处理

    https://blog.csdn.net/qq_34246546/article/details/79409185

    事务和锁机制是什么关系? 开启事务就自动加锁了吗?
    • 事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。
    • 事务的[隔离级别]通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的。
    • 开启事务就自动加锁。
    • 同时事务也是有不同的隔离级别的 :

    相关文章

      网友评论

          本文标题:数据库面试题

          本文链接:https://www.haomeiwen.com/subject/wiukjctx.html