Oracle查询没有匹配的数据时,语句执行速度还忙 Linux平台,Oracle 11g R2数据量在千万级别当select一条数据时,当有数据匹配时,速度很快;当select一条数据库中没有匹配的数据时,速度很慢,语句过很久才执行完毕。这到底是哪里出问题了?应在哪里优化,求助ing... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 千万级别的sql语句,只查询一条,肯定要走索引,否则查询会很慢 不存在锁定,在系统只有一个用户的情况下,也如此。SQL语句也极其简单:select * from test where account like '882345%';如果有的话,语句结束很快,马上出结果。如果没有会很慢。索引也已经建了。 select不会被阻塞。分别看看两次的执行计划。 1、你的认识有问题,匹配上了和没匹配 数据库都会去比较数据,不比较怎么不能判断匹不匹配。2、因为看不到你的sql给你举个简单的例子: 假设在column_name上有索引。 select * from table_name where column_name = 'xxxx'; 这个语句一般会用到索引(某些特殊情况下,oracle优化器会放弃索引),这样查询的速度很快,扫描几次就能找到目标。 select * from table_name where column_name != 'yyyy';(数据库中没有这样的数据,注意你的数据量是1千万) 这个时候因为是(not=),所以数据库要全表扫描所有数据来判断到底是不是有数据满足!= 'yyyy',1千万扫描速度可想而知。3、你可以想一下,如果我想知道身份证号码为:1234567890 的人原籍在哪是不是很好找。 如果我找一下身份证号码不是1234567890 的人呢,我是不是得把全国的人都找一边才能确定,漏掉一个都不行,因为很有可能你漏掉的那个人身份证的恰恰就是1234567890。例子可能不太恰当,体会意思就可以了。 强制使用索引看看:/*+ index(test ,account上的索引名) */ 跪求一个oracle时间区间查询的存储过程,具体如下? 求Oracle中给分区表建本地索引的例子 求助关于oracle空间的问题! 在ORALCE中怎么限制一个会话所占用的资源?? sql不能得到结果 Oracle安装问题。! oracle中的clob问题 oracle里面能否识别001|002|003|.....这种类型呢? 求 Oracle9i for solaris x86 的下在地址,急用!!! oracle中的空值怎么写条件? oracle设置DISPLAY问题 急,知道ORA错误代码怎么查对应的sqlstate value
SQL语句也极其简单:select * from test where account like '882345%';
如果有的话,语句结束很快,马上出结果。如果没有会很慢。
索引也已经建了。
2、因为看不到你的sql给你举个简单的例子:
假设在column_name上有索引。
select * from table_name where column_name = 'xxxx';
这个语句一般会用到索引(某些特殊情况下,oracle优化器会放弃索引),这样查询的速度很快,扫描几次就能找到目标。
select * from table_name where column_name != 'yyyy';(数据库中没有这样的数据,注意你的数据量是1千万)
这个时候因为是(not=),所以数据库要全表扫描所有数据来判断到底是不是有数据满足!= 'yyyy',1千万扫描速度可想而知。3、你可以想一下,如果我想知道身份证号码为:1234567890 的人原籍在哪是不是很好找。
如果我找一下身份证号码不是1234567890 的人呢,我是不是得把全国的人都找一边才能确定,漏掉一个都不行,因为很有可能你漏掉的那个人身份证的恰恰就是1234567890。例子可能不太恰当,体会意思就可以了。
/*+ index(test ,account上的索引名) */