一个sql语句的优化指导

[复制链接]
查看11 | 回复4 | 2007-8-9 15:37:26 | 显示全部楼层 |阅读模式
SELECT COUNT(COUNT(*)) AS NUM FROM numprefixslog a,NumprefixBiz b WHERE 1=1 AND 1=1 AND to_char(a.SendingTime,'yyyy-mm-dd') >= '2007-07-06' AND to_char(a.SendingTime,'yyyy-mm-dd') ='2007-07-06' used at line ID 5 of the execution plan contains an expression on indexed column "SENDINGTIME". This expression prevents the optimizer from efficiently using indices on table "DBUSER"."NUMPREFIXSLOG".

Rewrite the predicate into an equivalent form to take advantage of indices. Alternatively, create a function-based index on the expression. The optimizer is unable to use an index if the predicate is an inequality condition or if there is an expression or an implicit data type conversion on the indexed column.

请教如何优化此sql


以下是正在优化的 SQL 语句的原始解释计划。

全部展开 | 全部隐藏

操作 行 ID 对象 对象类型 顺序 行 大小 (KB) 成本 时间 (秒) CPU 成本 I/O 成本
SELECT STATEMENT 0

6 1 0.024 4245 51 3358595840 3853
SORT AGGREGATE 1

5 1 0.024 4245 51 3358595840 3853
HASH GROUP BY 2

4 1 0.024 4245 51 3358595840 3853
HASH JOIN 3

3 10167 248.218 4243 51 3343930624 3853
TABLE ACCESS FULL 4 NUMPREFIXBIZ TABLE 1 154 1.955 5 1 194219 5
TABLE ACCESS FULL 5 NUMPREFIXSLOG TABLE 2 10201 119.543 4238 51 3338409216 3848 [IMG][/IMG]
回复

使用道具 举报

千问 | 2007-8-9 15:37:26 | 显示全部楼层
to_char(a.SendingTime,'yyyy-mm-dd') 号换成=号.两个全表扫描
回复

使用道具 举报

千问 | 2007-8-9 15:37:26 | 显示全部楼层
最初由 catchwo 发布
[B]to_char(a.SendingTime,'yyyy-mm-dd') 号换成=号.两个全表扫描 [/B]

什么意思?
回复

使用道具 举报

千问 | 2007-8-9 15:37:26 | 显示全部楼层
看得不是很明白,但学习一点,还是有收获的
回复

使用道具 举报

千问 | 2007-8-9 15:37:26 | 显示全部楼层
1 首先把列上的函数取掉a.sendingtime= '2007-07-06' AND to_char(a.SendingTime,'yyyy-mm-dd') = '2007-07-06'修改为 a.sendingtime= '2007-07-06' AND to_char(a.SendingTime,'yyyy-mm-dd') = '2007-07-06'修改为 a.sendingtime<=to_date('2007-07-30,'yyyy-mm-dd');是否sendingtime的存储格式为'yyyy-mm-dd'有关系 如果保存的是 2007-07-30 18:30:12是否会有问题?
3. b.STATUS的状态有多种,大概5种状态,如果使用or 是否扩展起来需要修改sql
b.STATUS = sending orb.STATUS =stop orb.STATUS =sleep 等,如果要增加一种状态呢? [/B]
主要是修改2就可以了。因为原来的写法会导致不走index,你修改以后再看看执行计划。一般tuning sql要一步步做。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行