zoukankan      html  css  js  c++  java
  • 数据库其他常见面试题

    1、MYSQL什么时候会出现死锁?

    一般情况只发生锁超时,就是一个进程需要访问数据库表或者字段的时候,另外一个程序正在执行带锁的访问(比如修改数据),那么这个进程就会等待,当等了很久锁还没有解除的话就会锁超时,报告一个系统错误,拒绝执行相应的SQL操作。
    发生死锁的情况比较少,比如一个进程需要访问两个资源(数据库表或者字段),当获取一个资源的时候进程就对它执行锁定,然后等待下一个资源空闲,这时候如果另外一个进程也需要两个资源,而已经获得并锁定了第二个资源,那么就会死锁,因为当前进程锁定第一个资源等待第二个资源,而另外一个进程锁定了第二个资源等待第一个资源,两个进程都永远得不到满足。

    解决方案可以是:一次性分配所有的表资源,这样就不会死锁。

    2、B+树索引和hash索引的区别

    Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以Hash 索引的查询效率要远高于 B-Tree索引。
    1. 哈希索引能以 O(1) 时间进行查找,但是失去了有序性:无法用于排序与分组;只支持精确查找,无法用于部分查找和范围查找。Hash索引仅仅能满足"=",“IN"和”<=>"查询,不能范围查询,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询)
    因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;
    2. Hash索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

    使用选择

    如果存储的数据重复度很低(也就是说基数很大),对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引

    InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的一些优点,比如快速的哈希查找。

    3、什么时候Mysql会有慢查询?你写的sql有过慢查询吗?

    比如:select *;

    4、怎么样避免写出慢SQL

    使用explain关键字执行执行计划来测试sql性能

    5、一条SQL语句执行得很慢的原因有哪些?

    • 没有建索引
    • 没有命中索引
    • 索引失效
    • 表设计不合理
    • 索引设计不合理
    • SQL中有很多子表查询或者连接了多张表

    解决方案:

  • 相关阅读:
    亚马逊云IoT平台接入开发记录
    pip下载速度慢更换清华源试试
    gitlab回归上一次提交
    uos桌面壁纸存放路径
    python中json中的dump和dumps
    Python中的类中__dict__方法
    C++ | 数组反转的三种方法
    《C++Primer Plus》 | 复合类型
    pwn 中的函数 | 持续更新
    七月安恒DASCTF | 复现
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/14154664.html
Copyright © 2011-2022 走看看