Re: [SQL ] JOIN TABLE时WHERE的用法会影响效能吗?

楼主: JYHuang (夏天到了,冷不起来了说)   2016-06-23 20:57:49
推 streetbad: 1.JOIN能用inner就尽量不用left...JOIN内尽量避免使用06/23 10:27
→ streetbad: 子查询 尤其又是资料笔数多的时候 另外JOIN内如真无可06/23 10:28
→ streetbad: 可避免要用到子查询 建议增加字段的限缩 有用的再挑出06/23 10:29
→ streetbad: 来 避免使用*06/23 10:29
→ streetbad: 2.WHERE条件内 string的查询 避免使用like+or 可以改用06/23 10:30
→ streetbad: union试试看06/23 10:30
→ streetbad: 3.开执行计画看看是否有使用正确索引 耗用资源主要是在06/23 10:30
→ streetbad: 哪段语法上面 建立相对应的索引 A.key的部分也可以建06/23 10:31
→ streetbad: 立全文检索试试看 这样条件内可以尝试使用全文检索06/23 10:31
→ streetbad: 另外回答最后面的问题 两个条件查询的结果不会一样06/23 10:33
→ streetbad: 上述为个人实务上处理经验..有误请再提出指教Orz 06/23 10:39
推 rockchangnew: 都是Like '%%' 根本不会用索引06/23 13:50
感谢streetbad版友的提醒
目前的写法大致是如此,
A数据库有33万比资料,B大约有10万比。
两个资料都有f1,f2这些字段没有建索引,经由key字段关联。
要搜寻A,B中f1或f2符合val值的资料
而且只显示B最新的一笔
目前的写法是如此,大概两秒左右就能跑出资料了
不过上头似乎还是觉得有点慢 XD
我用分析工具,有三个时间会比较慢
send data 0.29 sec
send data 0.29 sec 猜测是要UNION两个资料的sql
send data 0.8 sec 然后这把汇集的资料再SELECT这一段
这种情形应该常见不是很罕见,
猜想应该还会有更好的方法,只是一时还想不太出来啊。
SELECT W.* FROM (
SELECT W.*,O.* FROM W
LEFT JOIN (
SELECT Key,f1,f2,f3 FROM (
SELECT Key,f1,f2,f3 FROM O
WHERE O.Key <> '' AND (O.f1='val' OR O.f2='val')
) as O
Order by O.f3 desc limit 1
) as O
ON W.key = O.key
WHERE W.key <> '' AND (W.f1='val' OR W.f2='val')
UNION
SELECT W.*,O.* FROM W
LEFT JOIN (
SELECT Key,f1,f2,f3 FROM (
SELECT key,f1,f2,f3 FROM O
WHERE O.key <> '' AND (O.f1='val' OR O.f2='val')
) as O
Order by O.f3 desc limit 1
) as O
ON W.key = O.key
WHERE W.key <> '' AND (O.f1='val' OR O.f2='val')
) as W
作者: streetbad (翊)   2016-06-24 00:10:00
如不介意是可释出一点字段内容资讯及条件还有欲产出的结果比较方便提供协助另外多层SELECT的动作还有LEFT JOIN子查询的部份 可以朝先塞到temp table的方向 字串的条件看起来也是可再调整 目前应该主要是这三块在拖速度
作者: streetbad (翊)   2015-06-23 10:27:00
1.JOIN能用inner就尽量不用left...JOIN内尽量避免使用子查询 尤其又是资料笔数多的时候 另外JOIN内如真无可可避免要用到子查询 建议增加字段的限缩 有用的再挑出来 避免使用*2.WHERE条件内 string的查询 避免使用like+or 可以改用union试试看3.开执行计画看看是否有使用正确索引 耗用资源主要是在哪段语法上面 建立相对应的索引 A.key的部分也可以建立全文检索试试看 这样条件内可以尝试使用全文检索另外回答最后面的问题 两个条件查询的结果不会一样上述为个人实务上处理经验..有误请再提出指教Orz
作者: rockchangnew (rock)   2015-06-23 13:50:00
都是Like '%%' 根本不会用索引

Links booklink

Contact Us: admin [ a t ] ucptt.com