这是一个简单的查询:select * from customers
当我在PL / SQL Developer中编写此查询并按F5时,我看到解释计划, 但我不知道成本,基数和字节代表什么。
答案 0 :(得分:7)
Oracle Optimizer是基于成本的优化器。执行计划 为SQL语句选择只是众多选择之一 优化程序考虑的执行计划。优化器选择 成本最低的执行计划 估计该计划的资源使用情况。成本越低越好 有效的计划预计将是。优化器的成本模型 说明将使用的IO,CPU和网络资源 查询。图8:成本见于第五栏 执行计划整个计划的成本(在第0行表示)和 每个单独的操作都显示在执行计划中。然而, 它不是可以调整或改变的东西。费用是 内部单位,仅显示以便进行计划比较。
您还可以查看Database Performance Tuning Guide,其中包含:
此列的值没有任何特定单位 测量;它只是用来比较成本的加权值 执行计划。此列的值是的函数 CPU_COST和IO_COST列。
所以 - COST是一个无量纲值,它是CPU和IO成本的函数。
答案 1 :(得分:5)
有关计划表列的说明,请参阅第12.10节。
https://docs.oracle.com/cd/E11882_01/server.112/e41573/ex_plan.htm#PFGRF009
成本是优化程序估计通过特定计划运行查询的工作量。优化器通常更喜欢低成本计划。
成本取决于几个不同的因素,但表统计数据是最大的因素之一。
基数是优化程序猜测为计划步骤处理的行数。如果统计数据是旧的,丢失的或不完整的 - 那么这可能是非常错误的。您想要查找优化器看到5行(基数)的位置,但实际上有50,000行。
字节与基数是相同的概念,但是要处理的数据与表格中的行相比。
这是一个非常深刻的话题,需要积极的学习和经验。我相信很多人都可以为去的地方提供想法。我个人很喜欢Maria's blog.她是优化器的前产品经理。