我读过一些关于MySQL中临时表的文章,但当涉及到一般的数据库,特别是MySQL时,我是一个公认的新手。我已经查看了一些有关如何创建临时表的示例和MySQL文档,但我正在尝试确定临时表如何为我的应用程序带来好处,其次,我猜测我会遇到什么样的问题。诚然,每种情况都是不同的,但我猜我想要的是关于这个主题的一些一般性建议。
我用谷歌搜索了一下,但没有找到我在这个主题上真正想要的东西。如果你有这方面的经验,我很乐意听听。
谢谢,马特
发布于 2008-09-22 18:04:16
当您有一个相当复杂的SELECT要执行,然后在该表上执行一系列查询时,临时表通常很有价值……
你可以这样做:
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执行一系列查询,而不必在每个查询上连接到购买和商品。然后,当您的应用程序不再需要数据库句柄时,不需要进行清理。
您几乎总是会看到临时表用于创建成本高昂的派生表。
发布于 2008-09-22 18:46:37
首先是免责声明--我的工作是报告,所以我最终得到的查询比任何普通开发人员都要复杂得多。如果您正在编写一个简单的CRUD (创建、读取、更新、删除)应用程序(这可能是大多数web应用程序),那么您真的不想编写复杂的查询,如果您需要创建临时表,那么您可能做错了什么。
也就是说,我在Postgres中使用临时表的目的有很多,而且大多数都会转换成MySQL。我使用它们将复杂的查询分解成一系列单独可理解的部分。我使用它们来保持一致性-通过一系列查询生成一个复杂的报告,然后我可以将这些查询中的一些卸载到我在多个地方使用的模块中,我可以确保不同的报告彼此一致。(并确保如果我需要修复某些东西,我只需要修复一次。)而且,我很少故意使用它们来强制执行特定的查询计划。(除非您真正了解自己在做什么,否则不要尝试!)
所以我觉得临时表很棒。但话虽如此,理解数据库通常有两种风格是非常重要的。第一个是针对大量小事务进行优化的,另一个是针对较少数量的复杂报告进行优化的。这两种类型需要进行不同的调优,并且在事务性数据库上运行的复杂报告存在阻塞事务的风险(因此会使web页面不能快速返回)。因此,您通常不希望避免将一个数据库同时用于两个目的。
我的猜测是,您正在编写一个需要事务性数据库的web应用程序。在这种情况下,您不应该使用临时表。如果您确实需要从事务数据生成复杂的报告,推荐的最佳实践是进行定期(例如每日)备份,在另一台计算机上还原它们,然后针对该计算机运行报告。
发布于 2008-09-22 18:04:48
当您需要从多个表中提取大量数据,对这些数据进行一些处理,然后将所有内容合并到一个结果集时,使用临时表的最佳位置。
在MS SQL中,由于与游标相关的速度和资源影响,还应尽可能使用临时表来代替游标。
https://stackoverflow.com/questions/116423
复制相似问题