查询的应用程序已经改变,但原理是相同的。
4表:
states -状态列表( store上的索引)商店-商店及其所处的状态( state,store上的单独索引) store_orders -将订单绑定到商店( store,order上的单独索引) order_statuses -有订单和状态( order,status上的单独索引)
我想要计算一个特定州的每个状态下有多少订单。
一个查询:
从存储区sto、store_order so、order_statuses os中选择sto.state = 'PA‘和sto.store = so.store order_statuses so.order = os.order group by os.order_status
在实际应用程序中,此处的显示计划返回的I/O估计约为500,000
但如果我这么做了:
从状态sta中选择os.order_status、count( os.order_status ),存储st0、store_order so、order_statuses os where sta.state = 'PA‘where sto.state = sta.state order_statuses sto.store = so.store和so.order = os.order group by os.order_status
I/O估计在2,000左右,我所做的更改查询的所有操作就是将states表连接到stores表,并在states而不是stores中指定确切的值。
不管我是指定一个显式的值,还是连接另一个带有显式值的表,DBM不是仍然需要对存储进行相同的搜索吗?
我正在尝试找出为什么估计的I/O要高得多。
我不是DBA,但我正在努力学习尽可能多的东西,因为我总是遇到这样的事情,而且我从来都不太确定为什么。
发布于 2009-08-24 13:31:22
Lazy Bob,您是否也可以打开IO统计数据,然后将结果添加到问题中:
将统计信息设置为
showplan本身不会提供您在评论中报告信息
此外,请张贴准确的工作查询-理想情况下,格式正确。
您的查询是"where sta.state = 'PA‘where sto.state = sta.state“,显然这不是您可以运行的内容
https://stackoverflow.com/questions/1316192
复制相似问题