首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的应用程序如何从临时表中受益?

问我的应用程序如何从临时表中受益?
EN

Stack Overflow用户
提问于 2008-09-22 18:00:11
回答 6查看 6.5K关注 0票数 15

我读过一些关于MySQL中临时表的文章,但当涉及到一般的数据库,特别是MySQL时,我是一个公认的新手。我已经查看了一些有关如何创建临时表的示例和MySQL文档,但我正在尝试确定临时表如何为我的应用程序带来好处,其次,我猜测我会遇到什么样的问题。诚然,每种情况都是不同的,但我猜我想要的是关于这个主题的一些一般性建议。

我用谷歌搜索了一下,但没有找到我在这个主题上真正想要的东西。如果你有这方面的经验,我很乐意听听。

谢谢,马特

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-22 18:04:16

当您有一个相当复杂的SELECT要执行,然后在该表上执行一系列查询时,临时表通常很有价值……

你可以这样做:

代码语言:javascript
复制
CREATE TEMPORARY TABLE myTopCustomers
   SELECT customers.*,count(*) num from customers join purchases using(customerID)
   join items using(itemID) GROUP BY customers.ID HAVING num > 10;

然后对myTopCustomers执行一系列查询,而不必在每个查询上连接到购买和商品。然后,当您的应用程序不再需要数据库句柄时,不需要进行清理。

您几乎总是会看到临时表用于创建成本高昂的派生表。

票数 16
EN

Stack Overflow用户

发布于 2008-09-22 18:46:37

首先是免责声明--我的工作是报告,所以我最终得到的查询比任何普通开发人员都要复杂得多。如果您正在编写一个简单的CRUD (创建、读取、更新、删除)应用程序(这可能是大多数web应用程序),那么您真的不想编写复杂的查询,如果您需要创建临时表,那么您可能做错了什么。

也就是说,我在Postgres中使用临时表的目的有很多,而且大多数都会转换成MySQL。我使用它们将复杂的查询分解成一系列单独可理解的部分。我使用它们来保持一致性-通过一系列查询生成一个复杂的报告,然后我可以将这些查询中的一些卸载到我在多个地方使用的模块中,我可以确保不同的报告彼此一致。(并确保如果我需要修复某些东西,我只需要修复一次。)而且,我很少故意使用它们来强制执行特定的查询计划。(除非您真正了解自己在做什么,否则不要尝试!)

所以我觉得临时表很棒。但话虽如此,理解数据库通常有两种风格是非常重要的。第一个是针对大量小事务进行优化的,另一个是针对较少数量的复杂报告进行优化的。这两种类型需要进行不同的调优,并且在事务性数据库上运行的复杂报告存在阻塞事务的风险(因此会使web页面不能快速返回)。因此,您通常不希望避免将一个数据库同时用于两个目的。

我的猜测是,您正在编写一个需要事务性数据库的web应用程序。在这种情况下,您不应该使用临时表。如果您确实需要从事务数据生成复杂的报告,推荐的最佳实践是进行定期(例如每日)备份,在另一台计算机上还原它们,然后针对该计算机运行报告。

票数 11
EN

Stack Overflow用户

发布于 2008-09-22 18:04:48

当您需要从多个表中提取大量数据,对这些数据进行一些处理,然后将所有内容合并到一个结果集时,使用临时表的最佳位置。

在MS SQL中,由于与游标相关的速度和资源影响,还应尽可能使用临时表来代替游标。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/116423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档