作者grence (多想两分钟 = =")
看板Database
标题Re: 请问这样查询效率会差很多吗?
时间Thu Nov 11 23:56:24 2010
※ 引述《drkkimo (花猫~ 努力研究 )》之铭言:
: 如果今天有一个select 查询 其中有A、B、C三个table 作join
: join的条件 只是三table的键值参照对应 再加上各自栏位的一些条件筛选
: 这样的情形 如果先把A和B join的结果 放到一个oracle的temporary table D中
: 再作C和D的join ,总共的查询时间 会比直接下查询快很多吗???
: //=============================
: 因为今天有人和我说这样会快很多 但感觉起来好像只有再次查询时 可以省掉对
: A、B join的时间
: 请问有人平常有用这种作法 或听说过这样会比较有效率的吗?? 谢谢
把 temp table想成快取吧
如果 A跟 B的资料够多,就可以试试看用 temp table省下 join的时间
有时预存程序会重复的 join相同的 table做不同的处理,
用 temp table除了可以简化程式,也可省下重复 join花费的时间
另外就是遇到错误的资料表设计…牵动太大不想动资料表结构的话,
也会考虑弄个 temp table,甚至对 temp table建 index…
建完 index再跑还比直接 join快上好几倍,这算少数状况吧,但有遇过。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.23.13
1F:→ fantasyj:如果是你提的情况,其实应该用实体table,而不是temp.. 11/12 08:13
啊,应该是你说的这样
但是程式设计师没有开资料表的权限
DBA.....~_~
再想了一下…
相同的资料不就要存两份?
修改要改两次,删除要删两次,一个不小心还不一致?
这个状况有什麽好办法吗?
....trigger? 就我遇过的,mssql的 trigger是个不稳定的东西
view可能好一点,也可建 index…但没实际用过
※ 编辑: grence 来自: 123.194.23.13 (11/12 20:09)
2F:推 drkkimo:view不错喔 很实用 但多个table构成的view可能无法作upda 11/12 20:28
3F:推 drkkimo:te 或insert delete .. 11/12 21:32
4F:→ fantasyj:oracle的Mview可以解决这个问题.. 11/12 22:10
就我以为的用途…VIEW只应该拿来 SELECT用?
※ 编辑: grence 来自: 123.194.23.13 (11/13 00:43)
5F:推 drkkimo:view也可以拿来增删修改 看情形 但考虑况状较多 所以如果 11/13 09:48
6F:→ drkkimo:使用时原则上只用来select也可以让情形较简化 11/13 10:56