多表(百万级)关联查询效率问题和大字段建立索引问题求教
一个多表关联的查询(每个表都是百万级的,11对应关系,表结构无法改动)
类似与这样的结构:
select a.id from
(selece a.id,a.username,a.last_update from tableA (nolock)) a
inner join (select b.username,keyword from tableB b(nolock) where XXXXX) b on a.username=b.username
inner join (select b.username,keyword from tableC c (nolock)where XXXXX) c on a.username=c.username
where (b.keyword like '%xx%' or c.keyword like '%xx%')
order by a.last_update
完整的查询根本动不了
分开单独查询INNER语句和单独查询LIKE语句,分别需要20秒和15秒,请问从SQL SERVER分析角度来讲,这个SQL用什么样的结构会查询更快呢?(理论上的就可以)
我尝试过这样的结构:
select a.id from tabelA INER JOIN TABLE B ON xxxx WHERE A.USERNAME IN (SELECT USERNAME FROM TABLEB WHERE KEYWORD LIKE '%XX%') order by xxxxxx
select a.id from tableA where a.username in (select SELECT USERNAME FROM TABLEB WHERE XXXX and KEYWORD LIKE '%XX%') order by xxxxxx
select a.id from (tableA INNER JOIN tableB where like xx) order by last_update
效率上都没有明显改善,还有什么办法呢?
另外还请问,NVCHAR字段超过900个字节就无法建立索引,改为TEXT后只能建立全文索引但执行效率没有明显改变
那么大的字段(长度超过5000个字节)各位是怎么执行LIKE查询的呢?