标签: temp-tables

慢DROP TEMPORARY TABLE

进入一个有趣的问题,我正在构建一个MySQL表作为临时表用于报告目的.

我发现如果我没有指定存储引擎,DROP TEMPORARY TABLE命令将挂起最多半秒.

如果我将我的表定义为ENGINE = MEMORY,那么这个短暂的挂起就会消失.

由于我有一个解决这个问题的方法(使用MEMORY表),我的问题是为什么临时表需要很长时间才能删除?默认情况下他们不使用MEMORY引擎吗?它甚至不是一个非常大的表,我的当前测试数据有几百行.

mysql performance temp-tables

6
推荐指数
1
解决办法
1124
查看次数

在函数中使用EXECUTE时出现PostgreSQL语法错误

我正在尝试创建一个引用PostgreSQL 8.4中的临时表的函数.基于我的研究,似乎最好的方法是使用EXECUTE命令从定义的字符串执行我的查询.

不幸的是,我在尝试创建函数时遇到奇怪的语法错误.

我目前的功能定义如下:

CREATE OR REPLACE FUNCTION example() RETURNS void AS $$
  EXECUTE 'INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3 from temp_table';
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ERROR:  syntax error at or near "'INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3 from temp_table'"
LINE 2:   execute 'INSERT INTO table1 (col1, col2, col3) SELECT col1...
Run Code Online (Sandbox Code Playgroud)

无论字符串文字中的实际内容如何,​​我似乎都得到了同样的错误.

我的问题是,1)使用EXECUTE特性的正确语法是什么,2)是否有更好的方法来编写这样一个引用临时表的函数?

postgresql function execute temp-tables syntax-error

6
推荐指数
1
解决办法
2万
查看次数

在MS SQL Server 2005中,当同一个SP的不同执行访问临时表时会发生什么?

我有一个存储过程,首先检查临时表(#temp_table),如果它存在则删除它,使用该表,然后在完成时最终删除它.当用户做某事来触发它时,该SP被随机调用,并且有时SP可能会同时执行 - 或者有些重叠.

假设我的Exec1和Exec2都是相同的SP创建,更改和删除#temp表,并且它们在相隔毫秒内运行.

怎么了?在Exec1完成时,Exec1会锁定#temp_table和Exec2等待吗?在我的情况下,这显然是可取的.我不希望Exec1和2同时使用该表,也不希望Exec2失败,因为Exec1已经在使用该表.

[编辑]我应该将临时表转换为表变量吗?

sql-server temp-tables table-locking

6
推荐指数
1
解决办法
2088
查看次数

如何将临时MySQL表转储到文件中?

有没有办法创建转储/导出/保存临时MySQL表到磁盘上的文件(.sql文件,类似于mysqldump创建的文件)?

mysql mysqldump temp-tables

5
推荐指数
1
解决办法
4552
查看次数

处理视图的MySQL Temp Table算法

如果将Temp Table算法重命名为Unscalable算法会很好.当在视图定义中看到它时,它可能会给开发人员提供更多警告 - 类似于在解释结果中使用临时表时.在大多数情况下只是一个诙谐的请求,但实际上它对于不知情的人来说是灾难性的.

麻烦的是,如果你在视图定义中做某些事情,它将从合理的合并算法切换到无望的低效临时表算法.如果涉及的数据很少,这没什么大不了的.但是,随着数据的增长,这将会破坏您的性能.

尽管如何最好地处理这个问题?这是一个问题,因为观点是在5年前实施的,我不知道有任何修复它的努力.这种问题是否存在于其他流行的数据库系统中?

向下滚动到下面的链接,讨论何时不能使用合并算法来查看导致MySQL使用糟糕的Temp Table算法退化的原因:http: //mysql2.mirrors-r-us.net/doc/refman/ 5.1/EN /创建-view.html

这有什么不好的?临时表算法的工作原理如下:

  1. 在视图定义中"按原样"运行视图,而不将查询的where子句标准合并到其中.
  2. 将结果数据转储到临时表中.
  3. 根据查询的where子句标准过滤临时表中的数据 - 此处也没有索引.

所以你可以想象当你有一个5000万行表和一个视图定义时所涉及的地狱 - 愚蠢的例子,但你得到了重点:

create view last_order_date as 
    select max(order_date) last_date, username from orders group by username;
Run Code Online (Sandbox Code Playgroud)

然后用户可以写:

select * from last_order_date where username = 'joejoe22' 
Run Code Online (Sandbox Code Playgroud)

2小时后返回结果......

那么如何最好地应对这种情况呢?

mysql algorithm merge views temp-tables

5
推荐指数
1
解决办法
2337
查看次数

获取sybase中Temp表的列

有没有办法在sybase中获取临时表的列列表?假设我有一个名为#mytable的表

select count (*) from  tempdb..#mytable
Run Code Online (Sandbox Code Playgroud)

返回145表示此表中有145行.我尝试了以下(有一些变化)

select so.name from tempdb..syscolumns sc inner join tempdb..sysobjects so on sc.id = so.id where so.name = '#mytable'
Run Code Online (Sandbox Code Playgroud)

也试过了

select so.name from tempdb..syscolumns sc inner join tempdb..sysobjects so on sc.id = so.id where so.name = 'tempdb..#mytable'
Run Code Online (Sandbox Code Playgroud)

两人都回来了,结果空洞.

有任何想法吗?在sybase中获取临时表的列名的任何其他原语?

sql sybase temp-tables

5
推荐指数
1
解决办法
6803
查看次数

MYSQL临时表 - 如何查看活动表

我们公司有一个简单的"crm-like"软件.有一些复杂的查询花了一些时间,每日使用查询...所以我测试一些修改使用临时表来替换我们需要的所有复杂的连接和子查询.

到目前为止进展顺利,速度达到90%以上.

由于它是一个网络应用程序(codeigniter + mysql),我打算把它放在"生产测试"环境中,所以50%的用户可以帮我测试它.我想监视活动的表,如果可能的话,监视每个连接.

我的问题是 - 有什么办法可以查看mysql实例中活动的所有TEMPORARY TABLES吗?也许查看其数据?

我读了一些关于插件或类似的东西,但这篇文章太乱了,我很理解.

非常感谢和抱歉我的英语 - 不是我的母语.

mysql mysql-management temp-tables

5
推荐指数
1
解决办法
1万
查看次数

在plpgsql函数中的PostgreSQL CREATE TEMPORARY TABLE

我正在尝试创建一个执行此操作的函数:

drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * from t_rv_openitem;
Run Code Online (Sandbox Code Playgroud)

当涉及到PostgreSQL中的函数时,我有时会感到困惑并得到此错误:

发生了错误:

错误:语法错误在"DROP"处或附近第3行:DROP TABLE t_rv_openitem;

我知道这似乎是一个简单的任务,但我正在试图解决这个问题.

这是完整的函数create语句:

CREATE OR REPLACE FUNCTION adempiere.update_t_rv_openitem()
  RETURNS rv_openitem AS
$BODY$

Drop table t_rv_openitem;
select * into t_rv_openitem from rv_openitem;
select * From t_rv_openitem;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION adempiere.update_t_rv_openitem() OWNER TO adempiere; 
Run Code Online (Sandbox Code Playgroud)

postgresql temp-tables plpgsql

5
推荐指数
1
解决办法
1万
查看次数

PostgreSQL临时表缓存在内存中?

背景:

我想在一些临时表中存储一些临时结果.这些表可以在几个可能在时间上接近的查询中重用,但在某些时候我正在使用的进化算法可能不再需要一些旧表并继续生成新表.可能会有几个查询,可能同时使用这些表.只有一个用户执行所有这些查询.我不知道这是否澄清了关于会话的所有内容等等,我仍然不确定它是如何工作的.

目标:

我想要做的是创建临时表(如果它们已经不存在),尽可能将它们存储在内存中,如果在某些时候没有足够的内存,则删除那些将被提交给临时表的内存.硬盘(我猜这些将是最近最少使用的).

示例:

客户端将对具有不同参数的EMA进行查询,并且它们具有不同系数的聚合,每个个体可以根据所使用的系数而变化,因此EMA的参数可以重复,因为它们仍然在基因库中,并且可以一段时间后不需要.将有更多参数的类似查询,遗传算法将找到参数的正确值.

问题:

  • 这是"提交下降"的意思吗?我已经看过关于会话和交易的描述,但我并不真正理解这些概念.对不起,如果这个问题很愚蠢.
  • 如果不是,你知道任何简单的方法让Postgres这样做吗?

解决方法:

在最糟糕的情况下,我应该能够猜测我可以保留多少个内存表并尝试自己实现LRU,但它永远不会像Postgres那样好.

非常感谢你.

postgresql session caching transactions temp-tables

5
推荐指数
1
解决办法
4196
查看次数

在SQL Server中的临时表中添加和更新列的后验

我正在尝试更改在存储过程中创建并填充的现有临时表,在我正在执行这些更改时调用此表.我无法更改调用存储过程,我需要将列添加到临时表,所以我尝试了这个:

ALTER TABLE #MyTemp 
ADD Column1 VARCHAR(100);           

UPDATE x
SET Column1 = a.SomeColumn
FROM #MyTemp x
INNER JOIN dbo.AnotherTable a (NOLOCK) ON a.ColumnName = x.ColumnName 
WHERE somecondition;
Run Code Online (Sandbox Code Playgroud)

它编译,但当我运行它我得到:

消息207,级别16,状态1,过程ProcName,行#
无效列名称'Column1'

看起来这个代码甚至没有被执行.

有人可以告诉我这是否可能以及如何?

谢谢.

sql sql-server stored-procedures temp-tables

5
推荐指数
2
解决办法
51
查看次数