为什么添加了索引后,会加快查询速度吗?
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
- 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秒了。