sqlin查询优化
① oracle中运行sql查询,where条件in()中的字段会不会出发索引
这个要看oracle优化器自己选择是否要使用INDEX了。这个要取决于你表name列的数据唯一性和分布。分以下2种情况。
1.name的唯一性较差:
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。这时优化器就会选择全表扫描,也就是说不会使index了。
2.name的唯一性较强
('name1','name2','name3','name4','name5')条件访问的数据占全表数据的百分比很小,这时优化器就会选择使用INDEX了,因此比没有INDEX时性能要高。
注意:ORACLE优化器了解表数据分布靠的是统计信息,因此统计信息的准确是十分重要的,否则也会产生错误的选择,导致性能下降。
② sql查询数据,查询全部速度很快,改成not in查询未销售就很慢,怎样优化谢谢!
in 和not in 速度都会慢。改成not exists()去写 会快一些。 上面有一个in 可以改成用exists 去写。
③ sql语句性能如何优化
如何加快查询速度?
1、升级硬件
2、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。
3、扩大服务器的内存
4、增加服务器CPU个数
5、对于大的数据库不要设置数据库自动增长,它会降低服务器的性能
6、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。
7、查询时不要返回不需要的行、列
8、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行
9、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数
10、一般在GROUP BY 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:
select的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。这样Group By 个Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快
11、一次更新多条记录比分多次更新每次一条快,就是说批处理好
④ 求优化一句sql语句,not in速度太慢了
有俩种方法可以提高查询效率, 1、 用not exists 代替 not in , 这种发法没有改变查询数据的形式,所以可能效果不明显。 2、 利用索引查询, select tbl1.id from table1 tbl1 left join table2 tbl2 on tbl1.id = tbl2.id where tbl2.id = null; 这个是把table2表过滤,查询直接找索引。
⑤ sql语句中条件查询里in、like、及=三个的效率怎么样
1、如果条件字段都是非索引字段,那么效率都差不多,就看结果大小。
2、有差别的在于条件字段是索引字段时:
=在所以的情况下都会进行索引扫描,所以效率总是高的。
like 当模糊查询为右模糊,比如'abc%'时,扫描索引,高效。
当模糊查询含左模糊时,比如'%abc',进行全表扫描,低效。
in的作用等同于or ,也是进行索引扫描,高效。
另外,in还可以连接查询结果集,这时往往会和exists做比较。
a、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),
其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。
b、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般效率不如exists,数据量大时,效果就更加明显。