SELECT * FROM a, b where instr(b.name,a.name)>0,其中a表中有两列,有5万多条数据,b表有4列,有两百多万条数据,我执行后一直在查询,不出结果,也不报错。我想查找出b表中的name列包涵a表中name列的数据,显示出来 如果我的语句不行,请指点下我该怎么做,请帮忙解答下吧,谢谢了先
--先查多少倏 select count(*) from b where exists(select * from a where instr(b.name,a.name)>0); --然後再取數據 select * from b where exists(select * from a where instr(b.name,a.name)>0);
count 时建议只选择有序主字段
楼主啊 你的sql SELECT * FROM a, b where instr(b.name,a.name)>0 有问题啊 a和b之间没有等值条件,就相当于做了一个笛卡尔积 50000*2000000=1000亿啊 能有结果才怪 你的需求是什么啊 主数据应该是一张表,而不是两张表吧 如果是两张表,之间肯定要有关联字段
--先查多少倏
select count(*) from b where exists(select * from a where instr(b.name,a.name)>0);
--然後再取數據
select * from b where exists(select * from a where instr(b.name,a.name)>0);
a和b之间没有等值条件,就相当于做了一个笛卡尔积 50000*2000000=1000亿啊 能有结果才怪
你的需求是什么啊 主数据应该是一张表,而不是两张表吧 如果是两张表,之间肯定要有关联字段
还真没有等值字段,就是想找出来a表中的name列里数据被b表中的name列包涵的,如a中与北京,b中有中国北京,就查找出来。
你原来的sql不出结果是应该的 因为千亿的数据量 不可能出结果
2楼的sql不出结果应该是慢 你可以试着优化一下 比如 里边用到两个select *,可以优化
也可以通过F5看一下查询计划,分析一下为什么慢 表中是否有索引等等
再者可以先count(*)一下看看有没有结果,数据量是多少 如果是100多万的话,就说明sql本身没问题,只是需要优化
如果count(*)也没有结果 那就先看看exists里边的条件的执行效率
遇到问题不要怕 要集中优势兵力各个歼灭,一个一个解决