100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > mysql索引及sql执行顺序

mysql索引及sql执行顺序

时间:2021-10-27 13:45:42

相关推荐

mysql索引及sql执行顺序

1, 红黑树 同一层级的黑树到根结点经历的黑树数目一样 最坏情况的时间复杂度 lg n 是二叉树

b树 结点可以有多个孩子 b+树 父节点不存储数据

聚集索引)的叶子节点会存储数据行,也就是说数据和索引是在一起 非聚集索引存储的是数据行的指针

2,InnoDB存储引擎支持两种常见的索引。

一种是B+树,一种是哈希。

所有记录的节点都在叶节点中,并且是顺序存放的

所有记录节点都是按照键值的大小顺序存放在同一层的叶节点中,各个叶子节点通过指针进行连接。由于一个节点中存放了多条的数据,那么检索的时候,进行的磁盘IO次数将会少掉很多

3,like 'abc%'会去索引中找 '%abc'不会

复合索引 使用第一部分才会使用索引

索引单独使用,否则不使用索引 or and

索引缺点 占空间 增加删除耗时

频繁更新的不适合索引 sex值类型少不适合,

4,InnoDB存储引擎的逻辑存储结构和 Oracle大致相同 ,所有数据都被逻辑地存放在一个空间中 ,我们称之为表空间 ( tablespace ) 。表空间又由段 ( segment ) 、区 ( extent ) 、页 ( page ) 组成 。页在一些文档中有时也称为块(block)

执行顺序

示例SQL:

SELECT * FROM user LEFT JOIN order ON user.id = order.uid WHERE order.price > 1000 GROUP BY user.name HAVING count(1) > 5 ORDER BY user.name LIMIT 0,10

1.FROM(将最近的两张表,进行笛卡尔积)---VT1

2.ON(将VT1按照它的条件进行过滤)---VT2

3.LEFT JOIN(保留左表的记录)---VT3

4.WHERE(过滤VT3中的记录)--VT4…VTn

5.GROUP BY(对VT4的记录进行分组)---VT5

6.HAVING(对VT5中的记录进行过滤)---VT6

7.SELECT(对VT6中的记录,选取指定的列)--VT7

8.ORDER BY(对VT7的记录进行排序)--游标

9.LIMIT(对排序之后的值进行分页)

WHERE条件执行顺序(影响性能)

1.MYSQL:从左往右去执行WHERE条件的。

2.Oracle:从右往左去执行WHERE条件的。

结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。