• MySQL常见面试题


    1、MyISAM 与 InnoDB 的区别?

      InnoDB:

        事务型的存储引擎,有行级锁定和外键约束

        可靠性高,要求事务、更新频繁

      MyIASM:

        默认存储引擎,不支持事务、外键,但是存储行数、索引和数据分开存储,读取效率高

        更新很少、读取频繁、发亮需求统计行数的sql

    对比项 MyISAM InnoDB
    外键 不支持 支持
    事务 不支持 支持
    行表锁

    表锁,操作一条数据也会锁住整个表

    不适合高并发的操作

    行锁,操作时只锁住某一行,对其他行没有影响

    适合高并发

    缓存 只缓存索引,不缓存真实数据 缓存索引和真实数据,对内存要求较高

    2. 事务的隔离级别:

      

    事务隔离级别 脏读 不可重复读 幻读
    读未提交
    不可重复读
    可重复读
    串行化

    3. Mysql 性能优化

      1. 当只要一行数据的时候使用 limit 分页查询 :

        查询到如果已知会得到一条数据,这种情况下加上limit 1,此时数据库引擎找到一条结果停止搜索,不需要继续查询

      2. 根据需求选择数据库引擎:

        MyISAM 适用于一些大量的查询的应用,不适合大量写功能的应用。

        InnoDB适用于哪些需要事务支持的应用。

      3. 用not exists 代替 not in :

        not exists 用到了连接能够发挥已经建立好的索引的作用

        not in 不能使用索引,所以要每条遍历比较,数据量大的情况下不建议使用 not in

      4. 对操作符的优化,尽量不采用不利于索引的操作符:如 

    in
    not in
    is null
    is not null
    < > 

      5. 为常用的字段建立索引

      6. 避免 select * 

      7. 读写分离,建立mysql集群,主从复制。读写分开

      8. 索引优化,使用自增的字段作为主键

      

    4. MySQL的触发器:

    CREATE TRIGGER mytrigger  -- 触发器名称,用户自定义
    trigger_time   --标识触发时机  BEFORE  或   AFTER
    trigger_event ON tbl_name  -- 标识触发事件  INSERT  UPDATE  DELETE  tbl_name: 标识触发器建立的表名 
    FOR EACH ROW  
    trigger_stmt  -- 触发体程序体,可以是一句SQL,或者 BEGIN 和 END 包含的多条语句
  • 相关阅读:
    CaseStudy(showcase)布局篇列表的排放与遮罩
    CaseStudy(showcase)布局篇全屏效果
    Css 学习
    JavaScript 学习之 修改对象创建新方法
    等额本息java实现
    纠结了一天的JAVA简单客户端服务器Socket编程终于解决了
    rhostudio备忘
    sql server学习
    enumeration学习
    cookie和session
  • 原文地址:https://www.cnblogs.com/joey-413/p/14122249.html
Copyright © 2020-2023  润新知