我刚刚使用Oracle,我写了一条update语句执行起来很慢UPDATE new_staff_info
SET add_ = 1
WHERE staff_id IN (1286, 1290, 1293, 1301, 1304, 1308)这样写有什么问题吗?
SET add_ = 1
WHERE staff_id IN (1286, 1290, 1293, 1301, 1304, 1308)这样写有什么问题吗?
staff_id 应该是你的主键吧?
analyze table new_staff_info compute statistics;
统计一下new_staff_info 表的表信息,看看
另问new_staff_info这张表有没有触发器啊?如果add_与其他表有关联也有可能出问题的。
SET add_ = 1;这样写试试.如果还慢,那试试
SELECT * FROM new_staff_info WHERE staff_id IN (1286, 1290, 1293, 1301, 1304, 1308);
这句的速度.看看执行计划
EXPLAIN PLAN FOR
SELECT * FROM new_staff_info WHERE staff_id IN (1286, 1290, 1293, 1301, 1304, 1308);SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
第一将IN改成exists吧
问下IN(1286, 1290, 1293, 1301, 1304, 1308)这里的值有多少个?如果比较多的话,全部是硬解析,每次都很消耗资源的,这样update的数据量一多的话,就会很慢的;比方说你有2000条记录要修改,而IN里面有300个需要匹配的值,那么表扫描次数就是300x2000,效率多慢啊。用exists(select 1 from tablename where ....)好了,我相信你IN里面的数据也是从表里取的吧,写个条件判断应该很好实现的吧!