1.简述触发器、函数、视图、存储过程?
触发器是一个特殊的存储过程,他是MySQL在insert、update、delete的时候自动执行的代码块。
视图就是一条select语句执行后返回的结果集。视图是对若干个基本表的引用,查询语句执行的结果,不存储具体的数据(基本表发生改变,视图也会跟着改变)。
视图的优点是方便操作,减少复杂的SQL语句,增强可读性。
函数 MySQL中提供了许多内置函数,还可以自定义函数(实现程序员需要的SQL逻辑处理)
存储过程 把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现(经过第一次编译后再次调用不需要再次编译,比一个个执行SQL语句效率高)
2.MySQL索引种类
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含这对数据表里所有记录的引用指针。
MySQL主要有以下几种索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引
普通索引 是最基本的索引,它没有任何限制。
唯一索引索引列的值必须唯一,但允许有空值。
更多的内容可以阅读:MySQL索引类型
3.索引在什么情况下遵循最左前缀的规则?
联合索引
4.主键和外键的区别?
主键:一张表中,可以用于唯一标识一条记录的字段组(或者说是属性组)。给你一个主键的值,你就可以找到一条确定的记录。
如:用户表:ID 用户名 密码 邮箱 这里ID就是主键,给你一个用户ID可以查找到一条用户的记录
外键:如果一个表A的主键还存在与另一个表B中,那么表B中这个字段可以作为表A的外键。
如:用户地址表中:收件人、收件地址、邮编、联系方式、用户ID,这里用户ID就是用户表的外键。
5.MySQL常见的函数?
总数:count(*)表示计算总行数
最大值:max(列)表示求此列的最大值
最小值:min(列)表示求此列的最小值
求和:sum(列)表示求此列的和
平均值:avg(列)表示求此列的平均值
6.列举 创建索引但是无法命中索引的8种情况。
- 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
- 对于多列索引,不是使用的第一部分的索引,则不会使用索引。
- like查询是以%开头
- 查询的数量是大表中的大部分数据
- 使用not in,not exist,无法命中索引
- 如果字段类型为字符串,一定要将数据值用引号包起来,否则不会使用索引
- 没有查询条件或者查询条件没有建立索引
- B-tree 索引 is null不走索引,is not null走索引
7.如何开启慢日志查询?
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句。
一共有两种方式:
- 执行语句设置(重启Mysql后会失效)
--是否开启慢日志查询,默认OFF,开启则设置为ON
SET GLOBAL slow_query_log = 'ON';
--慢日志文件存储位置
SET GLOBAL slow_query_log_file = '文件路径(绝对路径)';
--是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则是ON
SET GLOBAL log_queries_not_using_indexes = 'ON';
--超过多少秒的查询才会记录到日志中,注意单位是秒
SET GLOBAL long_query_time = 1;
- 修改配置文件(永久设置)
如果想重启MySQL后不失效,可以修改MySQL配置文件
在配置文件中添加以下语句:
slow_query_log=“ON”
slow_query_log_file=“文件路径(绝对路径)”
log_queries_not_using_indexes=“ON”
long_query_time=1
重启后生效。
8.数据库导入导出命令(结构+数据)?
9.数据库优化方案
文末给大家附一篇讲MySQL索引原理算法的文章,有兴趣的同学可以阅读下
B树和B+树的插入、删除图文详解