MySql查询语句的顺序

MySql数据库应该是当前大家日常应用比较多的一个关系型数据库,今天我们来说一下MySql查询语句的顺序。

-- 查询购买商品数量大于1的用户

SELECT * FOM user a LEFT JOIN  order b ON  a.user_id = b.user_id WHERE a.user_id = '' GROUP BY b.order HAVING count(*)>1;

这是一个比较简单的Sql,那么大家知道这个Sql的执行顺序吗?他的顺序优先级是这样的:

1.from 表1 
2.on <join条件>
3.<join类型>join 表2
4.where <where条件>  
5.group by <字段>
6.[fun(字段名)]  
7.having <having条件>  
8.Select
9.distinct 字段名1,字段名2
10.order by <排序字段>  
11.limit <起始偏移量,行数>

首先MySql会根据from查询对应表,然后根据on筛选条件,筛选后join形成临时表,然后执行where去筛选临时表,然后使用group by分组。

MySql索引失效

MySql会在什么情况下导致索引失效呢?以下有这几种方式会导致索引失效。

1.存在类型转换会导致索引失效。
2.使用函数会导致索引失效。
3.使用!= 或者<>会导致索引失效。
4.使用is not null会导致索引失效。
5.or前后存在非索引字段会导致索引失效。
6.like模糊查询以%开头会导致索引失效。
7.不符合最左匹配原则会导致索引失效。

MySql分库分表策略

MySql分库分表策略包括垂直拆分和水平拆分两种,垂直拆分根据业务拆分为不同的库,以解决表与表之间的io竞争,如订单库、用户库等。水平拆分是将同一个表的数据拆分到不同的库中,来解决单表数据量的增长导致的数据压力问题。

MySql排序的一个问题(工作中发现)

MySql主键为Varchar类型,当主键为1-10,排序会不按顺序排序,原因是由于字符串排序导致顺序不对。

MySql那些事_MySql

MySql事务的属性(ACID)

原子性

一致性

隔离性

持久性

MySql的存储引擎

常见的存储引擎有InnoDB、MyISAM、Memory、NDB。

MyISAM和InnoDB的区别

1.MyISAM不支持事务,InnoDB支持事务。

2.InnoDB支持外键,MyISAM不支持外键。

3.InnoDB是聚簇索引,MyISAM是非聚簇索引。

补充:什么是聚簇索引,什么是非聚簇索引?

聚簇索引:是将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。

非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。

4.InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁。

MySQL索引

提到索引,当去学习的时候,提出几个疑问?

1.什么是索引?

2.使用索引的优缺点?

3.索引的底层原理是什么?

那么我们接下来学习一下

1.什么是索引?

MYSQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构,所以说索引的本质是:数据结构索引的目的在于提高查询效率,可以类比图书的目录,可以简单的理解为:排好序的用于快速查找的数据结构

2.使用索引的优缺点?

索引优势

提高数据检索效率,降低数据库IO成本;

降低数据排序的成本,降低CPU的消耗;

索引劣势

索引也是一张表,保存了主键和索引字段,并指向实体表的记录,所以也需要占用内存。

虽然索引大大提高了查询速度,同时却会 降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。

3.索引的底层原理是什么?

B+树

1.B+树的每个非叶子节点存储都是数据索引,而不是数据本身,那么每块数据存储的索引更多,加载到内存,查询也更多,也降低了IO的读写次数。

2.B+树叶子节点有指向下一个叶子节点的指针,叶子节点类似于一个单链表,可以增加了区间的访问性,提高了范围查询,而B树的范围查询想对较差。

3.B+树中的B是Balance的缩写,全称多路平衡查找树。

欢迎各位大佬沟通讨论。