一张表,主键 YSFYB_ID ,三个索引 DYXSXXBID ,SFXMDMB_ID,DYXSXXB
SQL> desc ysfyb
Name Type
---------- -------------
YSFYB_ID NUMBER
NDMB_ID NUMBER
XQDMB_ID NUMBER
DYXSXXBID NUMBER
SFXMDMB_ID NUMBER
DYXSXXB VARCHAR2(20) sql语句1:
select * from ysfyb where sfxmdmb_id in (1,2,3) and dyxsxxb in ('aa','bb') and dyxsxxbid in (1,2,3,4,5,6....) 使用了索引扫描 sql语句2:
select * from ysfyb where sfxmdmb_id in (1,2,3) and dyxsxxb in ('aa','bb') and dyxsxxbid in (select xsid from aa where zydmb_id=1 and xbdmb_id=1)
索引失效,没有用索引查询 请问如何修改 sql语句2 在可以通过子查询的情况下使用索引查询 刚才提问有朋友建议用 exists ,但是试了一下以为可以,但结果还是不行,但是帖子不小心被我结了,重复一个帖子,希望高人指点一二
SQL> desc ysfyb
Name Type
---------- -------------
YSFYB_ID NUMBER
NDMB_ID NUMBER
XQDMB_ID NUMBER
DYXSXXBID NUMBER
SFXMDMB_ID NUMBER
DYXSXXB VARCHAR2(20) sql语句1:
select * from ysfyb where sfxmdmb_id in (1,2,3) and dyxsxxb in ('aa','bb') and dyxsxxbid in (1,2,3,4,5,6....) 使用了索引扫描 sql语句2:
select * from ysfyb where sfxmdmb_id in (1,2,3) and dyxsxxb in ('aa','bb') and dyxsxxbid in (select xsid from aa where zydmb_id=1 and xbdmb_id=1)
索引失效,没有用索引查询 请问如何修改 sql语句2 在可以通过子查询的情况下使用索引查询 刚才提问有朋友建议用 exists ,但是试了一下以为可以,但结果还是不行,但是帖子不小心被我结了,重复一个帖子,希望高人指点一二
2.ysfyb表一共有多少记录?
3.aa表上建的有索引吗?
你再aa表
zydmb_id,xbdmb_id,xsid
这三个字段有没有建索引呢。再这三个字段加过后,再用我给的语句
1.sql1直接列出id数据多,没有列很多,sql2直接用子查询,所以sql2语句肯定比sql1语句结果多的多
2.ysfyb中有5641136条数据
3.aa中没有建索引后面分析表后执行发现其实sql1,sql2都有用到索引,下面贴出执行图
sql 1 用到了索引
INDEX RANGE SCAN IND_YSFYB_DYXSXXBID
sql 2 用到了索引
TABLE ACCESS FULL AAA
INDEX RANGE SCAN IND_YSFYB_DYXSXXBID由于 aaa没有建索引,所以是全表扫描,但是问题是我建了3个索引,现在只用了一个dyxsxxbid,为什么其他两个没有用到
(sfxmdmb_id,dyxsxxb,dyxsxxbid)