这一篇文章写一下学习索引之前的一些知识,有SQL执行慢的原因和7种join连接。
性能下降、SQL执行慢的原因
查询语句写的烂
索引失效
单值:例如我们如果经常用到 WHERE name = xx 来查询筛选查询user表,那么我们可以考虑为name这一属性创建单值索引,
create index idx_user_name on user(name)
符合:如果经常用到name和email,我们可以考虑创建符合索引,
create index idx_user_nameEmail on user(name,email)
关联查询太多的join(设计缺陷或不得已的需求)
服务器调优及各个参数设置(缓冲、线程数等)
JOIN查询
SQL执行加载顺序
我们写的SQL:
1 | SELECT DISTINCT |
机器读的SQL:
1 | FROM <left_table> |
总结:
建表SQL
接下来我们要学习7种 JOIN,在这之前,我们先把表建立并插入一些数据,具体的SQL语句如下:
1 | CREATE TABLE `tbl_emp` ( |
1 | insert into tbl_emp values(1,"z3",1); |
执行完SQL,查询结果如下:
7种JOIN
一共7种JOIN,先通过一张图来了解它们:
Inner JOIN
Left JOIN
Right JOIN
Left Excluding JOIN
Right Excluding JOIN
Outer JOIN
因为mysql中没有outer join,我们要用union(连接加去重)和上面学过的几种join,才能实现这一效果
Outer Excluding JOIN
这个和前面一个差不多,只不过改一下 union 前后的语句即可