MySQL

2018-11-26  本文已影响0人  hcq0514
MySQL Server逻辑架构图

InnoDB跟MyISAM的区别( V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB )
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

  1. 连接层:主要负责数据库的链接
  2. 服务层:大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有内置函数(例如,日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等
[SQL]selec  * from test

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'selec  * from test' at line 1
select  * from test1 t1 join test2 t2 where  t1.id=3 and t2.id = 4

例如这条语句有两种方法:
(1)先join两表再判断 t1.id=3 and t2.id = 4
(2)先判断 t1.id=3 and t2.id = 4再join两表
两个结果虽然是一样的,不过执行效率差非常多,

select * from test1 where id = 10

执行开始之前,会先判断是否有操作权限,若没有,会抛出相关异常。

SELECT command denied to user ‘root’@’jock-x-pc’ for table ‘user’

如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
比如我们这个例子中的表 test1中,ID 字段没有索引,那么执行器的执行流程是这样的:
1、调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;
2、调用引擎接口取下一行,重复相同的判断逻辑,直到取到这个表的最后一行。
3、执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。
至此,这个语句就执行完成了。
对于有索引的表,执行的逻辑也差不多。第一次调用的是取满足条件的第一行这个接口,之后循环取满足条件的下一行这个接口,这些接口都是引擎中已经定义好的。
可以看出,是否有索引,执行效率区别还是很大的,没有索引需要取出所有数据,一个个进行比较;而有索引则是直接取满足条件的数据;

上一篇 下一篇

猜你喜欢

热点阅读