收录日期:2021/01/26 16:51:42 时间:2016/07/12 06:44:33 标签:基础和管理
有表 a
bh ..... hm1  hm2   zt.....
=======================
1        111  000    0
2        111  333    0
3        222  111    1
4        555  111    0
5        111  000    0
...
bh为主键,hm1,hm2 普通索引,zt作bitmap索引

有表b ,b是a的子表
bh       zd1    zd2
====================
1        mmm    nnn
2        mmm1   333
3        323    232
4        3ss    3232
5        333    432

bh普通索引

现在要得到所有a表和b表关联的所有hm1 or hm2 反包含于字符串'111,3332,'并且zt=0中的所有记录
现在所写的查询是
select * from a inner join b on a.bh=b.bh where a.zt=0 and (instr('111,3332,',a.hm1)>0 or instr('111,3332,',a.hm2)>0)
但查询速度不快.
不知如何优化,期待中.........
1.创建函数索引
create index idx_1 on a(instr('111,3332,',hm1));
create index idx_1 on a(instr('111,3332,',hm2));

2.
select * from b join (select * from a where zt=0)t on b.bh=t.bh 
 where instr('111,3332,',t.hm1)>0 or instr('111,3332,',t.hm2)>0


引用楼主 lbd8848 的帖子:
有表 a 
bh ..... hm1  hm2  zt..... 
======================= 
1        111  000    0 
2        111  333    0 
3        222  111    1 
4        555  111    0 
5        111  000    0 
... 
bh为主键,hm1,hm2 普通索引,zt作bitmap索引 

有表b ,b是a的子表 
bh      zd1    zd2 
==================== 
1        mmm    nnn 
2        mmm1  333 
3        323    232 
4        3ss    3232 
5     …
应该这样:

1.创建函数索引 
create index idx_1 on a(instr('111,3332,',hm1)); 
create index idx_2 on a(instr('111,3332,',hm2)); 

2.SQL
select * from b join (select * from a where zt=0 and (instr('111,3332,',hm1)>0 or instr('111,3332,',hm2)>0))t on b.bh=t.bh 
函数索引或

select * 
from a inner join b on a.bh=b.bh 
where a.zt=0 and (a.hm1='111' or a.hm1='3332' or a.hm2='111' or a.hm2='3332')
谢谢确实有所提高,结贴

关于存储过程的一些小心得(不知道对不对) 高手求救,ISAPI调用SQLserver的问题。在线等待! c语言编程访问大硬盘的物理扇区时坏扇区如何判断,如何跳过! WIN98+IE5和WIN2000+IE6运行JAVASCRIPT脚本的结果怎么不一样? 如何在只允许输入数字的文本框限制汉字的输入 求助!sql server 种子 自动标识 递增 在delphi中突然不可用??:(,嘴气歪了 出事了,我的线程停不了了。高人帮帮手。 asp连接oracle???急!!在线等待!! MSFlexGrid控件要如何添加内容? 我在基于FORMVIEW内加一个贴图的按纽,能显示,但返回时,按纽没了,且按纽地方一块灰色,为什么 如何給N條紀錄自動生成一個編號並寫入數据庫? 关于控件SmartMenuXP开发的文档 求助:混淆器JOC相关问题!!!急急急急急急急急急!!! 串口通讯 DBListBox可以直接显示出数据吗,象DBGrid一样 ** AddressOf在多线程方面后面的方法不能带参数嘛?100分送上! 急...区分两个不同按钮事件. 怎样使用SQLClientDataSet向数据库中添加和删除记录呀? 给我点勇气继续下去 在jsp中如何判断传来的字符串是8859-1编码还是gb2312编码方式 ----------m_ctrl[MAX].Create控件用DestoryWindow后怎么判断被Destory了this Help:about IIS 求Visual Studio.Net序列号!郁闷半天了! 怎么可以离开这个界面呢,在unix中 怎样在一个多线程程序中使用ADO2.7?? 域用户登录不了域…… 怎样制作VC的数据库表格?? Help:about IIS 做一消息问题? VB6和ACCESS的问题