标签: temp-tables

自连接中引用的SQL Server CTE速度很慢

我编写了一个表值UDF,它以CTE开头,从大表中返回行的子集.CTE中有几个连接.一对内部和一个左边连接到其他表,这些表不包含很多行.CTE有一个where子句,它返回日期范围内的行,以便只返回所需的行.

然后,我在4个自左连接中引用此CTE,以便使用不同的标准构建小计.

查询非常复杂,但这是一个简化的伪版本

WITH DataCTE as
(
     SELECT [columns] FROM table
                      INNER JOIN table2
                      ON [...]

                      INNER JOIN table3
                      ON [...]

                      LEFT JOIN table3
                      ON [...]
)
SELECT [aggregates_columns of each subset] FROM DataCTE Main
LEFT JOIN DataCTE BananasSubset
               ON [...] 
             AND Product = 'Bananas'
             AND Quality = 100
LEFT JOIN DataCTE DamagedBananasSubset
               ON [...]
             AND Product = 'Bananas'
             AND Quality < 20
LEFT JOIN DataCTE MangosSubset
               ON [...]
GROUP BY [
Run Code Online (Sandbox Code Playgroud)

我觉得SQL Server会感到困惑并为每次自我加入调用CTE,这似乎通过查看执行计划得到了证实,尽管我承认自己并不是那些阅读它们的专家.

我会假设SQL Server足够聪明,只能从CTE执行一次数据检索,而不是多次执行.

我尝试了相同的方法,但不是使用CTE来获取数据的子集,我使用了与CTE中相同的选择查询,而是将其输出到临时表.

引用CTE版本的版本需要40秒.引用临时表的版本需要1到2秒.

为什么SQL Server不够智能,无法将CTE结果保留在内存中? …

sql-server performance temp-tables common-table-expression

8
推荐指数
1
解决办法
6247
查看次数

临时表的替代方案

我需要什么(并获得临时表或视图是这样的):

numcasos  valcount1  valcount2  
--------  ---------  -----------
       0          2            1
       1          1            2
       2     (NULL)       (NULL)
       3     (NULL)            1
       4          1       (NULL)
       5     (NULL)       (NULL)
       6     (NULL)       (NULL)
       7     (NULL)       (NULL)
       8     (NULL)       (NULL)
       9     (NULL)       (NULL)
      10     (NULL)       (NULL)
Run Code Online (Sandbox Code Playgroud)

这是一个例子,因为我需要300多个valcounts.MySQL的:

CREATE TEMPORARY TABLE sumnum1
SELECT numos.num1 AS num1,
 COUNT(*)   AS valcount1      
FROM `numos` 
GROUP BY numos.num1  ; 

CREATE TEMPORARY TABLE sumnum2
SELECT numos.num2 AS num2,
 COUNT(*)   AS valcount2      
FROM `numos` 
GROUP BY numos.num2  ; 



SELECT casos.`numcasos` AS numcasos, 
sumnum1.valcount1 …
Run Code Online (Sandbox Code Playgroud)

mysql temp-tables

8
推荐指数
1
解决办法
2520
查看次数

MySQL用户创建的临时表已满

我有一个使用内存引擎创建的临时表如下:

CREATE TEMPORARY TABLE IF NOT EXISTS some_text (
    id INT DEFAULT 0,
    string varchar(400) DEFAULT ''
) engine = memory;
Run Code Online (Sandbox Code Playgroud)

当我插入行时,我遇到#1114错误,因为表已满.它在mysql文档中解释了更改tmp_table_sizemax_heap_table_size不做任何事情来增加用户创建的临时表的大小,这是我认为我在这里.如何让这张桌子更大?

我希望能够通过调用SET动态做到这一点,但我已经试过设置tmp_table_sizemax_heap_table_size他们都远远超出我在此表中预期的数据量.那么有谁知道如何在这个表上解决这个错误?谢谢任何帮助过的人.

mysql memory temp-tables

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

使用Pandas在MySQL中创建临时表

Pandas有一个很棒的功能,您可以在其中将数据帧写入SQL中的表.

df.to_sql(con=cnx, name='some_table_name', if_exists='replace', flavor='mysql', index=False)

有没有办法以这种方式制作临时表?

据我所知,文档中没有任何内容.

python mysql temp-tables pandas

8
推荐指数
2
解决办法
4257
查看次数

如何提高200+百万条记录的查询性能

背景

我有一个MySQL测试环境,其中的表包含2亿多行。在此表上必须执行两种类型的查询;

  1. 是否存在某些行。给定一个client_id和的列表,sgtin最多可容纳50.000个项目,我需要知道sgtin表中存在哪些。
  2. 选择那些行。给定一个client_id和的列表,sgtin最多可容纳50.000个项目,我需要提取整行。(商店,gtin ...)

对于单个“ client_id”,该表可以增长到200+百万条记录。

测试环境

至强E3-1545M / 32GB RAM / SSD。InnoDB缓冲池24 GB。(生产将是具有192GB RAM的更大服务器)

CREATE TABLE `sgtins` (
  `client_id` INT UNSIGNED NOT NULL,
  `sgtin` varchar(255) NOT NULL,
  `store` varchar(255) NOT NULL,
  `gtin` varchar(255) NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX (`client_id`, `store`, `sgtin`),
  INDEX (`client_id`),
  PRIMARY KEY (`client_id`,`sgtin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

测验

首先,我生成了随机的sgtin值,这些值分布在10个“ client_id”上,以用2亿行填充表格。

我创建了一个基准工具,该工具可以执行尝试的各种查询。另外,我还使用了解释计划来找出最佳性能。对于每次测试,该工具都会从我用来填充数据库的数据中读取新的随机数据。确保每个查询都是不同的。

对于这篇文章,我将使用28 sgtins。 临时表

CREATE TEMPORARY TABLE sgtins_tmp_table (`sgtin` …
Run Code Online (Sandbox Code Playgroud)

mysql sql temp-tables database-performance

8
推荐指数
1
解决办法
416
查看次数

Linq的临时表 - 任何人都看到这个问题?

试图解决:

Linq.包含大量设置会导致TDS错误

我想我偶然发现了一个解决方案,我想看看它是否是一种解决问题的犹太方式.

(简短摘要)我想对一个记录ID列表进行linq-join,这些记录id不是(完全或至少很容易)在SQL中生成的.这是一个很大的列表,经常超过TDS RPC调用的2100项限制.所以我在SQL中所做的就是把它们放在一个临时表中,然后在我需要它时加入它.

所以我在Linq做了同样的事情.

在我的MyDB.dbml文件中,我添加了:

<Table Name="#temptab" Member="TempTabs">
  <Type Name="TempTab">
    <Column Name="recno" Type="System.Int32" DbType="Int NOT NULL" 
          IsPrimaryKey="true" CanBeNull="false" />
  </Type>
</Table>
Run Code Online (Sandbox Code Playgroud)

打开设计器并关闭它会在那里添加必要的条目,但为了完整起见,我将引用MyDB.desginer.cs文件:

   [Table(Name="#temptab")]
   public partial class TempTab : INotifyPropertyChanging, INotifyPropertyChanged
   {

           private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

           private int _recno;

#region Extensibility Method Definitions
partial void OnLoaded();
partial void OnValidate(System.Data.Linq.ChangeAction action);
partial void OnCreated();
partial void OnrecnoChanging(int value);
partial void OnrecnoChanged();
#endregion

           public TempTab()
           {
                   OnCreated();
           }

           [Column(Storage="_recno", DbType="Int NOT NULL", IsPrimaryKey=true)]
           public int recno
           {
                   get …
Run Code Online (Sandbox Code Playgroud)

t-sql linq temp-tables

7
推荐指数
1
解决办法
4195
查看次数

我可以在SQLAlchemy中创建TEMPORARY TABLE而无需附加到Table._prefixes吗?

我想在SQLAlchemy中创建一个临时表.我可以通过调用一个对象来构建CREATE TABLE带有TEMPORARY子句的语句,但这不如用于向数据操作语言表达式添加前缀那么优雅.table._prefixes.append('TEMPORARY')Tabletable.select().prefix_with()

是否有相当于.prefix_with()DDL?

python sqlalchemy temp-tables

7
推荐指数
1
解决办法
4193
查看次数

SQL Server,带截断的临时表和带删除的表变量

我有一个存储过程,我在其中创建一个临时表,通常包含1到10行.在存储过程中,此表被截断并填充多次.它被截断,因为这比删除更快.当我因使用删除而受到惩罚(截断对表变量不起作用)时,通过用表变量替换此临时表,我是否可以获得任何性能提升

虽然表变量主要在内存中,并且通常比临时表更快,但是我必须通过删除而不是截断来获得任何好处吗?

sql-server-2005 temp-tables

7
推荐指数
2
解决办法
4万
查看次数

查看MySQL临时表 - 不在会话中

我目前有一个脚本正在运行,并且认为运行不会花这么长时间,脚本正在修改临时表.

我知道临时表只存在于当前会话中,但无论如何都要查看它们在会话外保存的数据吗?

原因是我想知道我的脚本将继续运行多长时间,如果我能看到临时数据,那么我就能弄明白.

mysql temp-tables

7
推荐指数
1
解决办法
6563
查看次数

为什么临时表比表变量更快?

为什么临时表比SQL Server中的连接的表变量更快?

注意:在两种情况下,表都有PK,表通过PK与其他"物理"表连接.

sql-server join temp-tables table-variable

7
推荐指数
2
解决办法
9831
查看次数