MySQL数据库

发布时间 2023-10-06 21:52:43作者: wyl010926

1. 事物的四大特性和隔离级别

原子性:不可分割的操作单元,要么全部成功,要么回滚。
一致性:如果执行事物之前数据库是一致的,那么执行后还是一致的。
隔离性:事物操作之间彼此独立和透明,互不影响。
持久性:事物一旦提交,其结果就是永久的。
未提交读:允许脏读,其他事物只要修改了数据,即使未提交,本事物也能看到修改后的数据值。
提交读:只能读取到已提交的数据。
可重复读(innoDB默认):无论其他事物是否修改并提交了数据,这个事物中的数据不受影响。
串行读:完全串行化的读,每次读都要获得锁,读写相互都会阻塞。

2. MySQL优化相关

    使用更小的整数类型、尽可能的定义字段为not null(否则会导致索引复杂)、
    只创建需要的索引、分库分表。
    使用explain检查复杂SQL语句、LIMIT语句尽量要跟order by或distinct
    插入多条数据时使用单条INSERT语句。

3. MySQL存储引擎InnoDB和MyISAM的区别

    InnoDB支持事物,MyISAM不支持。
    InnoDB支持外键,MyISAM不支持。
    InnoDB是聚集索引,MyISAM是非聚集索引。索引和数据文件是分离的。
    InnoDB必须要有主键(没有会自己找或创建),MyISAM可以没有。
    InnoDB不保存表的行数,MyISAM用了一个变量保存表的行数。
    InnoDB支持表、行级锁 默认行级锁,MyISAM只支持表级锁。

4. MySQL在哪些情况下不使用索引

    like查询使用%开头不能使用索引,但用%结尾的可以使用索引。
    where语句中使用<>或!=。
    where语句中使用or,且没有把or中的所有字段加上索引。
    where语句中对字段表达式操作。
    where语句中使用NOT IN。使用简单的IN会使用索引。

5. MySQL分库分表策略

    垂直切分:某个表字段过多,可以将不常用或字段长度较大的字段拆分出去到扩展表中。
    水平切分:分为库内分表和分库分表,是根据表内数据的逻辑关系,按照不同的条件分散到多个数据库或表中。