当SQL有外部连接时,要注意过滤条件的位置,否则网页会很慢。

奶奶,为什么五一节只有3天,五月的天气是最适合旅行的,但我们却很难享受IT的人。
公司一到公司,项目经理就发现了领导的发展,说我们的网页很慢,让他检查原因。
网站一慢,页面慢哥就来精神,老大哥的老线就是解决慢的问题。
领导者的发展是非常郁闷的说,我们已经添加了memcache缓存,20分钟一次,怎么还是慢,
所以我问,那个页面运行了什么SQL你能抓住它让我看看吗果断开发领导去掉SQL。
通过调查,我们发现SQL确实运行得很慢。
复制代码代码如下所示:
选择*
从(选择u.name universityname,
u.id universityid,
计数(a.signupnumber)playercnt
从t_b_university U
左连接t_d_education E
在e.university_id = u.id
左连接t_d_video_player一
在a.user_id = e.user_id
和e.isdefault = 1
和e.isvalid = 1
和a.auditstatus = 1
和a.isvalid = 1
左连接t_d_user C
在a.user_id =入境
和c.isvalid = 1
在u.region_code像'43 %
集团通过u.name,u.id)
通过playercnt倒序;

实施计划如下
复制代码代码如下所示:
实施计划
----------------------------------------------------------
计划哈希值:3938743742
--------------------------------------------------------------------------------------------
我的名字|操作| | |行| |字节成本(CPU)时间| |
--------------------------------------------------------------------------------------------
| 0 | SELECT语句| | | | 142 10366 170(3)| 00:00:03 |
1排序的| | | | | | 142 10366 170(3)| 00:00:03 |
2哈希组| | | | | | 142 10366 170(3)| 00:00:03 |
3哈希连接右外| | * | | | | 672 49056 168(2)| 00:00:03 |
4表访问全| * | | t_d_user | | | 690 5520 5(0)| 00:00:01 |
5嵌套循环外| | | | | | 672 43680 162(1)| 00:00:02 |
6哈希连接外| * | | | | | 672 37632 14(8)| 00:00:01 |
7表访问全| * | | t_b_university | | | 50 2050 8(0)| 00:00:01 |
8表访问全| | | t_d_education | | | 672 10080 5(0)| 00:00:01 |
| 9 |观| | | | 1 9 0(0)| 00:00:01 |
|×10 |滤波器| | | | | |
11表访问全| t_d_video_player | * | | | | 1 15 3(0)| 00:00:01 |
--------------------------------------------------------------------------------------------
谓词信息(由操作ID标识):
离开
3 -访问(。user_id=C。id(+))
4过滤器(。有效(+)= 1)
6 -访问()。university_id (+)=U。id
7过滤器()。region_code 像'43 %)
10过滤器()。有效性= 1,E。isdefault= 1)
11过滤器()。user_id=E。user_id 和。auditstatus= 1
A。有效性= 1)

你能找到这个SQL的问题吗SQL的慢是因为开发商把SQL的条件。
正确的写作方式应该是以下几点
复制代码代码如下所示:
选择*
从(选择u.name universityname,
u.id universityid,
计数(a.signupnumber)playercnt
从t_b_university U
左连接t_d_education E
在e.university_id = u.id
和e.isdefault = 1
和e.isvalid = 1
左连接t_d_video_player一
在a.user_id = e.user_id
和a.auditstatus = 1
和a.isvalid = 1
左连接t_d_user C
在a.user_id =入境
和c.isvalid = 1
在u.region_code像'43 %
集团通过u.name,u.id)
通过playercnt倒序;

实施计划如下
复制代码代码如下所示:
实施计划
----------------------------------------------------------
计划哈希值:2738827747
---------------------------------------------------------------------------------------------
我的名字|操作| | |行| |字节成本(CPU)时间| |
---------------------------------------------------------------------------------------------
| 0 | SELECT语句| | | | 142 11218 25(16)| 00:00:01 |
1排序的| | | | | | 142 11218 25(16)| 00:00:01 |
2哈希组| | | | | | 142 11218 25(16)| 00:00:01 |
3哈希连接右外| * | | | | | 301 23779 23(9)| 00:00:01 |
4表访问全| * | | t_d_user | | | 690 5520 5(0)| 00:00:01 |
5哈希连接右外| | * | | | | 301 21371 17(6)| 00:00:01 |
6表访问全| * | | t_d_video_player | | | 78 1170 3(0)| 00:00:01 |
7哈希连接外| * | | | | | 301 16856 14(8)| 00:00:01 |
8表访问全| * | | t_b_university | | | 50 2050 8(0)| 00:00:01 |
9表访问全| * | | t_d_education | | | 301 4515 5(0)| 00:00:01 |
---------------------------------------------------------------------------------------------
谓词信息(由操作ID标识):
离开
3 -访问(。user_id=C。id(+))
4过滤器(。有效(+)= 1)
5 -访问(。user_id (+)=E。user_id )
6过滤器()。auditstatus (+)= 1,。有效(+)= 1)
7 -访问()。university_id (+)=U。id
8过滤器()。region_code 像'43 %)
9过滤器()。isdefault (+)= 1,。有效(+)= 1)

SQL将运行至少5秒之前,现在0。一秒钟就能产生结果。
童鞋们,sql的时候有一个连接,我们要注意过滤条件的位置,记得吗!!!
SQL需要优化欢迎QQ群220761024应用从CSDN