「83」mysql小记
MySQL常见的问题:
-
select
- group by、order by、having 、 join等执行顺序
- 关于_rowid隐藏列
- group by用法
-
MMVC
- 解决的问题
-
误区
- group by和having
-
索引不命中情况
-
效率问题
- in后面接大量数据效率低问题
-
…
¶select 问题
¶group by、order by、having 、 join等执行顺序
1 | SELECT |
这个看看自然明白:
1 | 1. 先连接from后的数据源(若有join,则先执行on后条件,再连接数据源)。 |
¶关于_rowid隐藏列
同样的,先看☞官方资料
不过有一点需要注意:
If a table has a PRIMARY KEY or UNIQUE NOT NULL index that consists of a single column that has an integer type, you can use _rowid to refer to the indexed column in SELECT statements, as described in Unique Indexes.
¶group by用法
注意点:
Before 5.7.5, MySQL does not detect functional dependency and ONLY_FULL_GROUP_BY is not enabled by default. For a description of pre-5.7.5 behavior, see the MySQL 5.6 Reference Manual.
¶MMVC问题
这里不做过多解释了,就是个逻辑+锁的实现。
¶使用误区
¶group by和having
group by 和having的顺序小问题:
1 | select id,name,_rowid from test.table_name having id>2 group by id; ❎ |
¶索引不命中情况
¶效率问题
¶IN 和 Exists
看完总结下:
in:需要遍历后面的数据
exists: 需要查询数据库
select * from A where id in(select id from B)
select * from A where exists (select 1 from B where A.id=B.id);
B表数据大,推荐用exists。