一个表。算是字典表。xx
xx_id xx_name主表 yy
yy_id xx_id1 xx_id2 xx_id3 ...为yy表xx_id1,xx_id2,xx_id3作为索引列建立索引yy记录表比较多,有几十万到上百万。
xx表是固定的记录。大概不到一千条记录.查询的时候需要查出
xx_id1,xx_id2,xx_id3对应的name建了个一函数 GetNameByID(),专门用来根据xx_id取[name]
查询的时候:
select GetNameByID(xx_id1) ,GetNameByID(xx_id2) ,GetNameByID(xx_id3)
from yy
where ....问题:
这样查询。yy表上的索引不起作用。这种情况上采取什么方法好。
有多个ID需要取name
如果JOIN?
from yy
inner join xx
on (yy.xx_id1=xx.id or yy.xx_id2=xx.id or yy.xx_id3=xx.id)
where .... 这样效率也低。
select 列怎么写?
from yy
inner join xx
on (yy.xx_id1=xx.id or yy.xx_id2=xx.id or yy.xx_id3=xx.id)
where ....
select
id1_name=a.xx_name,
id2_name=b.xx_name,
id3_name=c.xx_name
from yy t
join xx a on a.xx_id=t.xx_id1
join xx b on b.xx_id=t.xx_id2
join xx c on c.xx_id=t.xx_id3
Select X1.xx_name as Name1,x2.xx_name as Name2,x3.xx_name as Name3
From YY y Join xx x1 on y.xx_id1=x1.xx_ID
Join xx x2 on Y.xx_id2=x2.xx_ID
Join xx x3 on Y.xx_id3=x3.xx_ID
用JOIN,这样效率还是低。
如何建?我这样建的不走索引seek
还是scan
create index [indexName]
on xx(xx_id)
include([name])
再次感谢参与讨论的csdner!
结贴散分