公司微网站制作,小程序开发平台官网,网站策划网,厦门建设工程招标中心的网站mysql知识点梳理 一、InnoDB引擎中的索引策略#xff0c;了解过吗#xff1f;二、一条 sql 执行过长的时间#xff0c;你如何优化#xff0c;从哪些方面入手#xff1f;三、索引有哪几种类型#xff1f;四、SQL 约束有哪几种呢#xff1f;五、drop、delete、truncate的区… mysql知识点梳理 一、InnoDB引擎中的索引策略了解过吗二、一条 sql 执行过长的时间你如何优化从哪些方面入手三、索引有哪几种类型四、SQL 约束有哪几种呢五、drop、delete、truncate的区别六、MYSQL中有几种锁列举一下七、如果某个表有近千万数据CRUD比较慢如何优化。1、分库分表2、索引优化 8、乐观锁和悲观锁悲观锁乐观锁 一、InnoDB引擎中的索引策略了解过吗 二、一条 sql 执行过长的时间你如何优化从哪些方面入手
1.检查是否走了索引如果没有则优化SQL利用索引 2.检查所利用的索引是否是最优索引 3.检查所查字段是否都是必须的是否查询了过多字段查出了多余数据查询太多的字段会回表 4.检查表中数据是否过多是否应该进行分库分表了 5.检查数据库实例所在机器的性能配置是否太低是否可以适当增加资源(内存、CPU、带宽、磁盘)
三、索引有哪几种类型
主键索引数据列不允许重复不允许为NULL一个表最终只能有一个主键。 唯一索引数据列不允许重复允许为NULL值一个表中允许多个列创建唯一索引。 普通索引基本的索引类型没有唯一性的限制允许为NULL值 联合索引多个列组成的一个索引需要符合最左匹配原则 全文索引是目前搜索引擎使用的一种关键技术 覆盖索引查询列要被所建的索引覆盖不需要回表
四、SQL 约束有哪几种呢
NOT NULL: 约束字段的内容一定不能为 NULL。 UNIQUE: 约束字段唯一性一个表允许有多个 Unique 约束。 PRIMARY KEY: 约束字段唯一不可重复一个表只允许存在一个 FOREIGN KEY: 外键。 CHECK: 用于控制字段值范围
五、drop、delete、truncate的区别 六、MYSQL中有几种锁列举一下 七、如果某个表有近千万数据CRUD比较慢如何优化。
1、分库分表
当单表数据量出现数据量极大的情况下要进行分库分表。
将原本存储于单个数据库上的数据拆分到多个数据库 把原来存储在单张数据表的数据拆分到多张数据表中实现数据切分从而提升数据库操作性能。分库分表的实现可以分为两种方式:垂直切分和水平切分。 2、索引优化
除了分库分表优化表结构当然还有所以索引优化等方案~
8、乐观锁和悲观锁
悲观锁
当要对数据库中的一条数据进行修改的时候为了避免同时被其他人修改最好的办法就是直接对数据进行加锁以防止并发。这种借助数据库锁机制【Pessimistic Concurrency Control缩写“PCC”又名“悲观锁”】。
悲观锁具有强烈的独占性和排他特性。它指的是对数据被外界(包括本系统当前的其他事务以及来自外部系统的事务处理)修改持保守态度。因此在整个数据处理过程中将数据处于锁定状态。
悲观锁的实现往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性否则即使在本系统中实现了加锁机制也无法保证外部系统不会修改数据) 之所以叫做悲观锁是因为这是一种对数据的修改持有悲观态度的并发控制方式。总是假设最坏的情况每次读取数据的时候都默认其他线程会更改数据因此需要进行加锁操作当其他线程想要访问数据时都需要阻塞挂起。悲观锁的实现
传统的关系型数据库使用这种锁机制比如行锁、表锁、读锁、写锁等都是在操作之前先上锁。Java 里面的同步 synchronized 关键字的实现。
悲观锁主要分为共享锁和排他锁
共享锁【shared locks】又称为读锁简称 S 锁。顾名思义共享锁就是多个事务对于同一数据可以共享一把锁都能访问到数据但是只能读不能修改。排他锁【exclusive locks】又称为写锁简称 X 锁。顾名思义排他锁就是不能与其他锁并存如果一个事务获取了一个数据行的排他锁其他事务就不能再获取该行的其他锁包括共享锁和排他锁。获取排他锁的事务可以对数据行读取和修改。
乐观锁
乐观锁是相对悲观锁而言的乐观锁假设数据一般情况不会造成冲突所以在数据进行提交更新的时候才会正式对数据的冲突与否进行检测如果冲突则返回给用户异常信息让用户决定如何去做。乐观锁适用于读多写少的场景这样可以提高程序的吞吐量。 乐观锁采取了更加宽松的加锁机制。也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制但乐观锁不会刻意使用数据库本身的锁机制而是依据数据本身来保证数据的正确性。乐观锁的实现
CAS 实现Java 中java.util.concurrent.atomic包下面的原子变量使用了乐观锁的一种 CAS 实现方式。版本号控制一般是在数据表中加上一个数据版本号 version 字段表示数据被修改的次数。当数据被修改时version 值会 1。当线程 A 要更新数据时在读取数据的同时也会读取 version 值在提交更新时若刚才读取到的 version 值与当前数据库中的 version 值相等时才更新否则重试更新操作直到更新成功。