Mysql常见面试题(持续更新中)

一.MySQL数据库中的字段类型varchar和char的主要区别是什么?

   char和varchar最大的不同就是一个是固定长度,一个是可变长度.由于是可变长度,因此存储的是实际字符串再加上一个记录字符串长度的字节。如果分配给char或varchar列的值超过 列的最大长度,则对值进行裁剪.
   varchar(M)和char(M),M都表示字符数.varchar的最大长度为65535个字节,不同的编码所对应的最大可存储的字符数不同.char最多可以存放255个字符,不同的编码最大可用字节数不同

二.优化mysql数据库的方法

    1,数据表中的数据类型的优化  如选择合适的字段,选择效率快速的字段 
    2,索引优化
    3、SQL语句的优化
      (1)优化查询过程中的数据访问如使用limit、使用返回列不用*
      (2)优化长难句的查询语句 变复杂为简单、切分查询、分解关联查询
      (3)优化特定类型的查询语句如优化count()、优化关联查询、优化子查询、优化Group by、优化li'mit
    4、存储引擎的优化
      (1)尽量使用InnoDB存储引擎,因为它支持事务、外键、使用独立表空间、使用的是行级锁、
    5、数据表结构的设计优化
      (1)分区操作 如通过特定的策略对数据进行物理拆分、对用户透明的、partition by
      (2)分库分表  如水平拆分(以行级进行拆分)、垂直拆分(列及拆分)
    6、数据架构的优化
      (1)主从复制(2)读写分离(3)双主热备(4)负载均衡  通过LVS的三种模式实现的、Mycat数据库中间件实现的

三.myisam和innodb的区别

innodb:具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID,大量的insert和update适用;支持表锁;读写阻塞与事务隔离级别相关
    myisam:没有事务,它提供高速存储和检索,以及全文搜索能力,大量的select适用;支持行锁;读写互相阻塞

    场景选择:
        MyISAM:
            不需要事务支持(不支持)
            并发相对较低(锁定机制问题)
            数据修改相对较少(阻塞问题),以读为主
            数据一致性要求不是非常高
            尽量索引(缓存机制)
            调整读写优先级,根据实际需求确保重要操作更优先
            启用延迟插入改善大批量写入性能
            尽量顺序操作让insert数据都写入到尾部,减少阻塞
            分解大的操作,降低单个操作的阻塞时间
            降低并发数,某些高并发场景通过应用来进行排队机制
            对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率
            MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问

        InnoDB:
            需要事务支持(具有较好的事务特性)
            行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
            数据更新较为频繁的场景
            数据一致性要求较高
            硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO
            主键尽可能小,避免给Secondary index带来过大的空间负担
            避免全表扫描,因为会使用表锁
            尽可能缓存所有的索引和数据,提高响应速度
            在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交
            合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性
            避免主键更新,因为这会带来大量的数据移动
 

你可能感兴趣的:(数据库,mysql,数据库)