亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 請教個(gè)簡單問題 [打印本頁]

作者: cxt442    時(shí)間: 2010-12-30 14:14
標(biāo)題: 請教個(gè)簡單問題
SQL就是個(gè):update A SET A.COL1 = (SELECT B.COL1 FROM B WHERE A.ID=B.ID) WHERE EXISTS(SELECT 1 FROM B WHERE A.ID=B.ID)

A,B表中id都是唯一索引
A中的數(shù)據(jù)有20w條件,B中的數(shù)據(jù)10條左右

但是更新的時(shí)候,數(shù)據(jù)庫只利用了B的索引,無法利用A的索引
怎么寫才能利用上A的索引
作者: doni    時(shí)間: 2010-12-30 14:20
如果b.id是PK或unique的話,可以這樣:
update
(select a.col1 ac, b.col1 bc
   from a, b
where a.id = b.id)
set ac = bc;
作者: cxt442    時(shí)間: 2010-12-30 14:23
非常感謝,我試一下
作者: cxt442    時(shí)間: 2010-12-30 14:41
能說一下以前的寫法哪里不合適嗎,因?yàn)槌绦蚶镉玫給racle數(shù)據(jù)庫update更新的地方都這么寫的,不知道具體什么原因造成利用不上A表索引,改變寫法影響很大
作者: doni    時(shí)間: 2010-12-30 14:52
本帖最后由 doni 于 2010-12-30 14:55 編輯

首先,update ... where exists 這樣是不會用索引的
其次,A表不走索引基本上也沒什么問題,因?yàn)檫@個(gè)update可能會命中大部row,所以沒有必要用索引
如果,A表中會被update的row很少的話,就要考慮用我前面給出的SQL
作者: cxt442    時(shí)間: 2010-12-30 15:29
非常感謝耐心解答
作者: renxiao2003    時(shí)間: 2010-12-30 23:09
好復(fù)雜啊。呵呵。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2