1)sql执行顺序是什么?

from(查询范围)》join(连表查询)》where(查询条件)》group by(分组)》having(分组条件)》select(查询字段)》distinct(去重)》order by (排序)》limit(查询条数)

(2)MyISAM和InnoDB的区别?

InnoDB支持事务、行锁、聚簇索引、采用数据页存储方式(每个表对应一个表空间,存储在data目录下。表名.ibd),实际开发中默认使用InnoDB存储引擎。

双写缓冲区,自适应hash索引和BufferPool一起被称为innodb的三大特性。

MyISAM不支持事务、支持表锁、每个表采用.frm表结构文件 .myd数据文件 .myi索引文件存储。

(3)MySQL中的悲观锁和乐观锁?

MySQL中的乐观锁可以基于版本号实现,在数据表中增加一个版本号字段,更新前查询版本号,在更新时候进行版本号对比。

MySQL悲观锁可通过select for update实现。基于数据库行锁机制。

(4)什么情况下索引会失效?

查询条件使用不等于、左模糊匹配、or、函数计算

查询条件设计到类型转换

组合索引前一个索引使用范围查询

数据表数据量较少时

(5)说下B+树和B-树?

(6)explain执行分析?

explain是一个分析sql执行计划的命令。

explain结果参数:select_type参数、type参数(const、eq_ref、ref、range、index、all)、key参数、req参数、select_type参数、extra参数。

type参数含义:const级别标识使用了主键或唯一索引,效率高。

eq_ref级别通常用于联接,每个索引返回对应数据行,使用主键或唯一索引,效率高。

ref级别使用非唯一索引,返回匹配数据行,涉及回表查询。

range级别索引范围扫描,返回匹配数据行,涉及回表查询。

index级别全索引级别查询,使用场景根据非唯一索引排序查询。

all级别全表查询。

extra参数含义:Using index 只需读取索引行数据,无需回表。

Using where 索引检索后还需执行数据筛选,可创建组合索引。

实际开发过程中sql语句至少要优化到range级别。

(7)如何处理慢sql?

首先开启慢sql监控,通过监控查询出慢sql,然后通过explain执行计划分析。

mysql开启慢日志记录:

(8)sql优化?

避免在索引列上进行计算、使用函数、不等于、not in

select查询必要的列

where查询频繁的字段建立索引

缩小子查询的结果

from涉及到多个表时,选择数据最少的为基础表

(9)InnoDB通过什么机制来实现事务支持的?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注