SQL优化

本文探讨了SQL优化的重要性,特别是如何利用索引来提升查询速度。介绍了单列和复合索引的创建及使用,强调了复合索引第一列在WHERE条件中的必要性。通过案例说明,即使使用了提示(index),在某些情况下复合索引也可能未被有效利用,需要调整索引列顺序。此外,文章还指出not exists并不总是查询的最佳选择,尤其是在关联子查询中可能造成大表开销,需要根据具体情况考虑优化策略。
摘要由CSDN通过智能技术生成
索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。索引有很多种,我们主要介绍常用的几种:

      为什么添加了索引后,会加快查询速度吗?

1)单列索引

  单列索引是基于单个列所建立的索引,比如:

  create index 索引名 on 表名(列名)

2)复合索引

  复合索引基于两列或是多列的索引,在同一张表上可以有多个索引,但是要求列的组合必须不同,比如:

  create index emp_idxl on emp (ename,job);

  create index emp_idxl on emp (job,ename);…………

 

在压力测试时发现,如果原来的查询在0.1秒之内,那么在40个并发时,平均速度是3秒。目标要求是所有的查询必须要在7秒之内。有好几条SQL都是在7秒左右,肯定不能通过压力测试,必须要优化到2秒之内才有希望通过压力测试。

(注:主要数据表的记录数都会超过60W条),所以只能是在项目组内进行SQL优化。

(因为某些原因,案例所使用的SQL都是经过笔者处理过的,已经不是最原始的SQL了。所以不便于贴出详细的执行计划)

1、索引很重要

  当查询的记录数小于表记录总数的10%时,索引的效果是非常明显的。

优化前要看执行计划,去掉不必要的全表扫描,找出花费时间的SQL。然后加上适当的索引。

2.注意复合索引失效

create index n1 on ht(code,status,ht) ;

create index n1 on ht(code,status,ht) ; 

在ht表上的ht,code,status三列上已经存在复合索引n1

select * from ht ,qt where ht.ht= qt.ht

  1. select * from ht ,qt where ht.ht= qt.ht  

select * from ht ,qt where ht.ht= qt.ht

   发现这个查询需要20秒左右。

  查看执行计划时发现,n1这个索引并没有被使用。

  于时,使用提示 index

select index h(n1) from ht h , qt   q where h.ht = q.ht  

select index h(n1) from ht h , qt   q where h.ht = q.ht  

使用提示后,查询只需要0.01秒了。

 

  

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值