作者JYHuang (夏天到了,冷不起来了说)
看板Database
标题[SQL ] JOIN TABLE时WHERE的用法会影响效能吗?
时间Wed Jun 22 22:24:35 2016
今天在写MySQL时,发现条件比较宽时会出现捞资料捞到SERVER没回应
便有点好奇WHERE先後顺序和配对会不会影响效能?
Table A和B大概都是有几千比的资料
两着的关联是由一个可能为空白(不是null)的值
在下了指令
SELECT * FROM A
LEFT JOIN (SELECT * FROM B WHERE A.name like '%k%' ORDER BY x) B
ON A.key=B.key
WHERE (A.key like '%k%' OR B.key like '%k%')
然後就执行到没回应了,
猜想用括号括起来是不是会先JOIN 再做条件
要是如果改下
WHERE A.key like '%k%' OR B.key like '%k%'
会不会先把A做饰选後再去JOIN饰选後的B?
另外
WHERE (A.key like '%k%' OR B.key like '%k%') AND
(A.id = n OR B.id)
跟
WHERE A.key like '%k%' OR B.key like '%k%' AND
A.id = n OR B.id
应该是不一样结果的吧?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.255.152.9
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1466605479.A.C80.html
1F:→ iFEELing: 关键字:执行计画 06/23 03:28
2F:→ JYHuang: 感谢..我看一下MySQL的工具有没有这功能 06/23 09:05
3F:→ JYHuang: 今天再看一下,主单33万笔、子单10万笔.... 06/23 09:12
4F:推 streetbad: 1.JOIN能用inner就尽量不用left...JOIN内尽量避免使用 06/23 10:27
5F:→ streetbad: 子查询 尤其又是资料笔数多的时候 另外JOIN内如真无可 06/23 10:28
6F:→ streetbad: 可避免要用到子查询 建议增加栏位的限缩 有用的再挑出 06/23 10:29
7F:→ streetbad: 来 避免使用* 06/23 10:29
8F:→ streetbad: 2.WHERE条件内 string的查询 避免使用like+or 可以改用 06/23 10:30
9F:→ streetbad: union试试看 06/23 10:30
10F:→ streetbad: 3.开执行计画看看是否有使用正确索引 耗用资源主要是在 06/23 10:30
11F:→ streetbad: 哪段语法上面 建立相对应的索引 A.key的部分也可以建 06/23 10:31
12F:→ streetbad: 立全文检索试试看 这样条件内可以尝试使用全文检索 06/23 10:31
13F:→ streetbad: 另外回答最後面的问题 两个条件查询的结果不会一样 06/23 10:33
14F:→ streetbad: 上述为个人实务上处理经验..有误请再提出指教Orz 06/23 10:39
15F:推 rockchangnew: 都是Like '%%' 根本不会用索引 06/23 13:50