面试题:一条SQL查询语句是如何执行的呢?
我的回答:
根据MySQL的逻辑架构,从上到下分别是:
1.连接器,连接器会建立与服务器的连接,获取权限、维持和管理连接。
2.MySQL8.0之前,会查询是否缓存命中。因为MySQL8.0之前,之前执行过的SQL查询语句会以key-value键值对的形式缓存到内存中。如果之前存在,就会直接返回结果,不会再次执行查询。MySQL8.0之后,由于存在缓存失效和维护成本,所以将查询缓存的功能移除了。
3.分析器,一条SQL查询语句就是一个字符串,是由各个单词和空格组成的。分析器分为词法分析和语法分析。词法分析就是将SQL语句这个字符串分解为每个单词。语法分析就是会检查各个单词的拼写以及符号是否正确等语法问题。
4.优化器,优化器会根据成本选择一个最优的执行计划。比如说:一个SQL查询语句有多个索引的话,会选择哪个索引;会选择表的连接顺序等。
5.执行器,执行器会根据优化器选择的执行计划,执行SQL语句。执行之前会进行权限检查,检查通过便会调用存储引擎的API来执行实际的数据操作。