当前位置:首页 » 编程语言 » sql临时表性能
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql临时表性能

发布时间: 2023-05-14 09:22:56

sql Server 表变量和临时表的区别

临时表、表变量的比较
1、临时表
临时表包括:以#开头的局部临时表,以##开厅册逗头的全局临时表。
a、存储
不管是扮卖局部临时表,还是全局临时表,都会放存放在tempdb数据库中。
b、作用域
局部临时表:对当前连接有效,只在创建它的存储过度、批处理、动态语句中有效,类似于C语言中局部变量的作用域。
全局临时表:在所有连接对它都结束引用时,会被删除,对创建者来说,断开连接就是结束引用;对非创建者,不再引用就是结束引用。
但最好在用完后,就通过drop table 语句删除,及时释放资源。
c、特性
与普通的表一样,能定义约束,能创建索引,最关键的是有数据分布的统计信息,这样有利于优化器做出正确的执行计划,但同时它的开销和普通的表一样,一般适合数据量较大的情况。
有一个非常方便的select ... into 的用法,这也是一个特点。

2、表变量
a、存储
表变量存放在tempdb数据库中。
b、作用域
和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。
c、特性
可以有主键,但不能直接创建索引,也没有任何数据的统计信息。表姿锋变量适合数据量相对较小的情况。
必须要注意的是,表变量不受事务的约束,

㈡ sqlserver中临时表有什么用

可以存段尺宴放一个临时的结果集
比如某个复杂查询【也可能不复杂 ,多表join 子查询 多条件,多case等】被频繁的执行来获取某个结果集
这个结果集就困薯可以放一个临时表,省的反复执行该复杂查询浪握银费时间

㈢ SQL Server 表变量和临时表的区别

临时表 vs. 表变量
1.存储位置:临时表是利用了硬盘(tempdb数据库) ,表名变量是占用内存,因此小数据量当然是内存中的表变量更快。当大数据量时,就不能用表变量了,太耗内存了。大数据量时适模唤雀合用临时表。
2.性能:不能一概而论,表变量存储数据有个性能临界点,在这个临界点链宏之内,表变量比临时表快,旦早表变量是存储在内存中的。
3.索引:表变量不支持索引和统计数据,但可以有主键;临时表则可以支持索引和统计数据。
参考:http://www.cnblogs.com/freshman0216/archive/2010/11/14/1868672.html

㈣ sql server中的临时表与普通表有什么区别

作用域不同,当你关闭sql连接的时候 临时表就会 自动删除,普通表不会
1、创建方法:
方法一:
create table TempTableName

select [字段1,字段2,...,] into TempTableName from table
方法二:
create table tempdb.MyTempTable(Tid int)
说明:
(1)、临时表其实是放在数据库tempdb里的一个用户表;
(2)、TempTableName必须带“#”,“#"可以是一个或者两个,以#(局部)或##(全局)开头的表,这种表在会话期间存在,会话结束则自动删除;
(3)、如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在。
2、手动删除
drop table TempTableName

普通表和临时表的区别只是表名开头无 "#"

㈤ mysql 参数调优(10)之 tmp_table_size 优化临时表

https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html

tmp_table_size默认16M。tmp_table_size如果困段慎过小,存不下了就会存到磁盘上。对于group by会有性能影响。

下面的sql EXPLAIN 如下,出现了Using temporary。表示查询会利用临时表。

在默认tmp_table_size大小16M下执行:

查看临时表统计信息,Created_tmp_disk_tables 为0,Created_tmp_tables 为1表示上诉sql执行后生产了一张内存里的临时表。

将tmp_table_size 调从16M调整为16K

再次执行,查询时间从4变成了18秒

重新统计

再次查看status,这次有在燃衡磁盘上创建1个临时表。

设汪敬置为32M

Percona Server中的临时表信息会记录到慢查询日志
由于MySQL慢查询日志里没有使用临时表的信息,这就给我们诊断性能问题带来了一些不便,第三方的版本如Percona Server,在慢查询里可以有更详细的信息,将会记录临时表使用的情况,从而有助于我们诊断和调优。

mysql8中对临时表有较大的优化
临时表引擎使用innodb(default 磁盘)和temptable(default 内存)

㈥ sql server 存储过程 临时表 越来越慢

1、尽量优化语句,尽量少姿档用游标。
2、修改较为常用的表要注意,最好先在临时表中作好运算和其它处理迹伍乱,最后在修改这橘桥些表,以免较慢的存储过程长时间锁定表记录,影响数据正常使用。
3、将连接超时和命令超时适当扩大,以免超时错误。

㈦ sql server中的临时表与普通表有什么区别

临时表分为:

本地临时表,仅限于当前访问者访问,创建方法去如下:
create table #TableName(表结构)
储存于数据库tempdb内(硬盘),当前用户断开连接,自动删除
如果使用中不断开连接,且不需要该临时表请执行:drop table #TableName

全局临时表,所有访问用户访问,创建方法去如下:
create table ##TableName(表结构)
储存于数据库tempdb内,当所有访问用户断开连接,自动删除
删除语句:drop table ##TableName

㈧ 如何进行SQL性能优化

这里分享下mysql优化的几种方法。

1、首先在打开的软件中,需要分别为每一个表创建 InnoDB FILE的文件。

㈨ sql 如何用临时表优化性能

InnoDB 类型的临时表存在的潜在问题

尽管使用 InnoDB 是性能最佳的,但可能会出现新的潜在问题。在某些特定情况下,您可能会出现磁盘耗尽和服务器中断。

与数据库中的任何其他 InnoDB 表一样,临时表具有自己的表空间文件。新文件与通用表空间一起位于数据目录中,名称为 ibtmp1。它存储所有 tmp 表。不运行手动运行 OPTIMIZE TABLE,表空间文件就会不断增长。如果你不能使用 OPTIMIZE,那么唯一能将 ibtmp1 大小缩小为零的方法,就是重新启动服务器。幸运的是,即使文件无法减小,在执行查询后,临时表也会自动删除,表空间可回收使用。现在,我们想一想以下情境:

  • 存在未优化的查询,需要在磁盘上创建非常大的的临时表

  • 存在优化的查询,但他们正在磁盘上创建非常大的临时表,因为你正在对此数据集进行计算(统计,分析)

  • 高并发连接时,运行相同的查询,伴随临时表的创建

  • 没有很多可用空间

  • 在这些情况下,文件 ibtmp1 大大增加,很容易耗尽可用空间。这种情况每天发生几次,并且必须重启服务器才能完全缩小 ibtmp1 表空间。使用不可收缩的文件可以轻松耗尽磁盘空间!
  • 那么,如何避免磁盘耗尽和中断呢?


    简单的解决方案:使用更大的磁盘

  • 虽然可以暂时解决问题,但这不是最佳解决方案。实际上,您可以通过逐步增加磁盘大小,来猜测具体需要的空间。如果环境位于云中,或者在非常大的虚拟平台,这很容易实现。但是使用这种解决方案,您可能会面临不必要的开支。您还可以通过设置以下配置变量将 ibtmp1 文件移动到专用大型磁盘上: [mysqld] innodb_temp_data_file_path = ../../tmp/ibtmp1:12M:autoextend

  • 需要重启 MySQL 。注意,必须将路径指定为相对于数据目录。

    设置 ibtmp1 大小的上限

  • 例如: [mysqld] innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G

  • 在这种情况下,文件不能超过 10GB。可以降低宕机概率,但也是一个危险的解决方案。当数据文件达到最大值时,会查询失败并显示一个错误,提示表已满。


  • 退回 MyISAM 将临时表存储在磁盘上
  • 这个解决方案似乎违反直觉,但它可能是快速避免中断的最佳方法,并保证使用所有需要的临时表。

  • internal_tmp_disk_storage_engine = MYISAM

  • 由于变量是动态的,您也可以在运行时设置它: SET GLOBAL internal_tmp_disk_storage_engine = MYISAM;

  • 回到 MyISAM,您将大大降低写满磁盘空间的可能性。实际上,临时表将创建到不同的文件中,并在查询结束时立即删除。
  • 虽然总是有可能看到相同的问题,以防你可以在同一时间运行查询或非常接近。在我的实际案例中,这是避免所有中断的解决方案。

    优化你的查询

  • 在将存储引擎退回到 MyISAM 以减轻中断发生后,必须花时间分析查询。目标是减小磁盘上临时表的大小。本文的目的不是解释如何调查查询,而是可以依赖慢速日志,像 pt-query-digest 和 EXPLAIN 这样的工具。一些技巧:
  • 在表上创建缺少的索引

  • 如果不需要,可以在查询中添加更多过滤条件以更少收集的数据

  • 重写查询以优化执行计划

  • 可以在应用程序中使用队列管理器来序列化它们的执行或减少并发性

  • 但希望在所有优化之后,您可以返回将临时存储引擎设置为 InnoDB 以获得更好的性能。

    结论

    有时这些改进会产生意想不到的副作用。用于磁盘上临时表的 InnoDB 存储引擎是一个很好的改进,但在某些特定情况下,例如,如果您有未优化查询和很少的可用空间,则可能因“磁盘已满”错误而中断。将 tmp 存储引擎退回到 MyISAM 是避免中断的最快方法,但是为了返回到 InnoDB,查询的优化是更重要的事情。更大或专用的磁盘也可能有所帮助。但这是一个微不足道的建议。

㈩ sql临时表多大时会影响性能

sql临时表为20G时会影响性能。根据查询相关公开信息显示,临时表会和普通文件一样占据一定内存,影响系统工作效率,临时表是建立在系统临时文件夹中的表,使用得当,可以像普通表一样进行各种操作,在退出时自动被释放。