• mysql 面试部分知识点


    一、四种隔离级别

    Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
    Repeatable read (可重复读):可避免脏读、不可重复读的发生。
    Read committed (读已提交):可避免脏读的发生。
    Read uncommitted (读未提交):最低级别,任何情况都无法保证。

    脏读:事务a读取到事务b更新的数据,b回滚,a就读到的数据是脏数据
    不可重复读:事务a多次读取数据时,在事务a读取过程中,事务b多次对数据进行更新,使事务a读取到的数据不一致
    幻读:事务a前后两次查询统一范围的数据,后一次查询到前一次没有的数据


    二、mysql表优化
    1、对表设置主键
    2、部分字段使用 enum 代替 varchar ,比如 性别
    3、对经常使用的字段加索引
    4、可使用varchar 代替 char ,因为varchar会动态分配长度,char是固定长度
    5、在表中,应尽量设置默认自,避免字段为null
    6、对于大字段,使用独立表进行存储
    7、对经常新增 修改的表,减少索引
    8、垂直查分表,将常用字段放在一张表,不常用的放在另一张表

    三、mysql语句优化
    1、where 子句中 避免使用 or != <>,会放弃使用索引,进行全表查询
    2、在查询部分数据数使用limit ,比如limit 10 会查询到10条数据后停止搜索,不会继续查询剩下的数据
    3、使用join代替子查询
    4、避免全表查询,在order by 和where 后面的字段加索引
    5、避免在where 字句中使用 null,会放弃索引,全表查询
    6、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
    7、in 、not in 会全表查询
    8、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
    9、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
    10、不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    四、mysql事务的基本特性:
    原子性:一个事务,一定是不可分割的最小的工作单位,要么提交成功,要么失败,不可能成功一部分。
    隔离性:每一个事务在最终提交前,是不可见的
    持久性:事务成功提交后,数据库的修改是一直存在的,数据保存到数据库,不会丢失
    一致性:数据库重一个一致性状态,变到另一个一致性状态

    五、MySQL中myisam与innodb的区别
    (1)、innoDB 与 myisam 的区别:
    1、innoDB支持事务,myisam不支持事务
    2、innoDB支持行级锁,myisam支持表级锁
    3、innoDB支持外键,myisam不支持
    4、innoDB不支持全文索引,myisam支持。
    5、innoDb支持mvcc,myisam不支持
    6、innoDb支持多种行格式,myisam不是
    7、innoDb是索引组织表,myisam不是
    8、innoDB不能直接copy表文件到另一台机器,myisam可以
    (2)、innodb引擎的4大特性
    1、插入缓存
    2、二次写
    3、自适应哈希索引
    4、预读

    六、如何使用explain优化sql和索引?
    explain sql ;
    id:每个被独立执行的操作的标志,表示对象被操作的顺序。一般来说, id 值大,先被执行;如果 id 值相同,则顺序从上到下。
    select_type:查询中每个 select 子句的类型。
    table:显示这一行的数据是关于哪张表的;
    partitions:匹配的分区信息。
    type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
      all: full table scan ;MySQL将遍历全表以找到匹配的行;
      index : index scan; index 和 all的区别在于index类型只遍历索引;
      range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值的行,常见与between ,< ,>等查询;
      ref:非唯一性索引扫描,返回匹配某个单独值的所有行,常见于使用非唯一索引即唯一索引的非唯一前缀进行查找;
      eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或者唯一索引扫描;
      const,system:当MySQL对某查询某部分进行优化,并转为一个常量时,使用这些访问类型;如果将主键置于where列表中,MySQL就能将该查询转化为一个常量;
    possible_keys;显示可能应用在这张表中的索引;如果为空,没有可能的索引;可以为相关的域从WHERE语句中选择一个合适的语句;
    key:实际使用的索引;如果为NULL,则没有使用索引;很少的情况下,MySQL会选择优化不足的索引;这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引
    key_len:使用的索引的长度;在不损失精确性的情况下,长度越短越好
    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
    rows:MySQL认为必须检查的用来返回请求数据的行数
    filtered:rows*filtered/100 表示该步骤最后得到的行数(估计值)。
    extra:重要的补充信息。

  • 相关阅读:
    Python 基础 -2.4.2 生成器,迭代器
    Python 基础 -2.4.1 装饰器
    Python 基础 -2.4 函数进阶,名称空间,闭包,高阶函数,递归,匿名函数,生产式,生成器,迭代器
    Python 基础 -2.3 函数
    python中字典,元组,列表和字符串之间的转换
    input和raw_input区别
    Python 基础 -2.2 文件操作
    Golang之AES/DES加密解密
    Golang与MySQL
    RTFM
  • 原文地址:https://www.cnblogs.com/zmjc/p/14506654.html
Copyright © 2020-2023  润新知