数据库 – Oracle – 创建索引或添加列后需要计算统计信息吗?
我们在Production中使用Oracle 10.2.0.5数据库.
优化器处于“基于成本”模式. 以后需要计算统计信息(DBMS_STATS包)吗? >创建一个新的索引 ? 谢谢 解决方法没有简短的答案.它完全取决于你的数据和你如何使用它.这里有一些需要考虑的事情:由于@NullUserException指出,通常每天晚上都会自动收集统计信息.这通常够好在大多数(OLTP)环境中,如果您刚刚添加新对象,则在统计信息自动收集之前不会包含大量数据.计划不会那么糟糕,如果这些对象是新的,他们可能不会很快被使用. >创建一个新的指数 – No. “Oracle Database now automatically collects statistics during index creation and rebuild”. 收集优化器的统计数据比大多数人都意识到的要困难得多.在我目前的工作中,我们的大多数性能问题最终都是因为统计数据不佳.如果你想为你的系统制定一个计划,你应该读Managing Optimizer Statistics chapter. 更新: 没有必要收集空对象的统计信息;动态采样将与从数据字典中读取统计数据一样快. (基于快速测试,解析大量具有和不具有统计信息的查询)如果禁用动态抽样,那么可能会出现一些奇怪的情况,即Oracle的默认值会导致计算不准确,您将更好地了解统计信息一张空桌子. 我认为Oracle在创建时自动收集索引的统计数据的原因是因为它的成本不高.创建索引时,必须读取表中的所有块,因此Oracle可能会同时计算级别,块,密钥等的数量. 表统计可能更复杂,可能需要多遍数据.与可以用作create-table-as-select的一部分的任意SQL相比,创建索引相对简单.使用这些任意SQL语句并将其转换为也返回收集统计信息所需的信息的查询可能是不可能或有效的. 当然,收集空表的统计数据并不需要任何额外的费用.但是它也不会获得任何东西,只要看到USER_TABLES.LAST_ANALYZED的用户看起来就被分析,但没有任何有意义的数据,那么这只会是误导的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |