精华内容
下载资源
问答
  • 此文将给出在使用Oracle临时表的过程中需要注意的事项,并对这些特点进行验证。①临时表不支持物化视图②可以在临时表上创建索引③可以基于临时表创建视图④临时表结构可被导出,但内容不可以被导出⑤临时表通常是...

    此文将给出在使用Oracle临时表的过程中需要注意的事项,并对这些特点进行验证。

    ①临时表不支持物化视图

    ②可以在临时表上创建索引

    ③可以基于临时表创建视图

    ④临时表结构可被导出,但内容不可以被导出

    ⑤临时表通常是创建在用户的临时表空间中的,不同用户可以有自己的独立的临时表空间

    ⑥不同的session不可以互相访问对方的临时表数据

    ⑦临时表数据将不会上DML(Data

    Manipulation Language)锁

    1.临时表不支持物化视图

    1)环境准备

    (1)创建基于会话的临时表

    sec@ora10g> create global temporary table t_temp_session (x int) on commit

    preserve rows;

    Table created.

    sec@ora10g> col TABLE_NAME for a30

    sec@ora10g> col TEMPORARY for a10

    sec@ora10g> select TABLE_NAME,TEMPORARY from user_tables where table_name =

    'T_TEMP_SESSION';

    TABLE_NAME

    TEMPORARY

    ------------------------------ ----------

    T_TEMP_SESSION

    Y

    (2)初始化两条数据

    sec@ora10g> insert into t_temp_session values (1);

    1 row created.

    sec@ora10g> insert into t_temp_session values (2);

    1 row created.

    sec@ora10g> commit;

    Commit complete.

    sec@ora10g> select * from t_temp_session;

    X

    ----------

    1

    2

    (3)在临时表T_TEMP_SESSION上添加主键

    sec@ora10g> alter table T_TEMP_SESSION add constraint PK_T_TEMP_SESSION

    primary key(x);

    Table altered.

    2)在临时表T_TEMP_SESSION上创建物化视图

    (1)创建物化视图日志日志

    sec@ora10g> create materialized view log on T_TEMP_SESSION with sequence,

    rowid (x) including new values;

    create materialized view log on T_TEMP_SESSION with sequence, rowid (x)

    including new values

    *

    ERROR at line 1:

    ORA-14451: unsupported feature with temporary table

    可见,在创建物化视图时便提示,临时表上无法创建物化视图日志。

    (2)创建物化视图

    sec@ora10g> create materialized view mv_T_TEMP_SESSION build immediate

    refresh fast on commit enable query rewrite as select * from T_TEMP_SESSION;

    create materialized view mv_T_TEMP_SESSION build immediate refresh fast on

    commit enable query rewrite as select * from T_TEMP_SESSION

    *

    ERROR at line 1:

    ORA-23413: table "SEC"."T_TEMP_SESSION" does not have a

    materialized view log

    由于物化视图日志没有创建成功,因此显然物化视图亦无法创建。

    2.在临时表上创建索引

    sec@ora10g> create index i_t_temp_session on t_temp_session (x);

    Index created.

    临时表上索引创建成功。

    3.基于临时表创建视图

    sec@ora10g> create view v_t_temp_session as select * from t_temp_session

    where x<100;

    View created.

    基于临时表的视图创建成功。

    4.临时表结构可被导出,但内容不可以被导出

    1)使用exp工具备份临时表

    ora10g@secdb /home/oracle$ exp sec/sec file=t_temp_session.dmp

    log=t_temp_session.log tables=t_temp_session

    Export: Release 10.2.0.1.0 - Production on Wed Jun 29 22:06:43 2011

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -

    Production

    With the Partitioning, OLAP and Data Mining options

    Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set

    About to export specified tables via Conventional Path ...

    . . exporting table

    T_TEMP_SESSION

    Export terminated successfully without warnings.

    可见在备份过程中,没有显示有数据被导出。

    2)使用imp工具的show选项查看备份介质中的SQL内容

    ora10g@secdb /home/oracle$ imp sec/sec file=t_temp_session.dmp full=y show=y

    Import: Release 10.2.0.1.0 - Production on Wed Jun 29 22:06:57 2011

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -

    Production

    With the Partitioning, OLAP and Data Mining options

    Export file created by EXPORT:V10.02.01 via conventional path

    import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set

    . importing SEC's objects into SEC

    . importing SEC's objects into SEC

    "CREATE GLOBAL TEMPORARY TABLE "T_TEMP_SESSION"

    ("X" NUMBER(*,0)) ON COMMIT "

    "PRESERVE ROWS "

    "CREATE INDEX "I_T_TEMP_SESSION" ON

    "T_TEMP_SESSION" ("X" ) "

    Import terminated successfully without warnings.

    这里体现了创建临时表和索引的语句,因此临时表的结构数据是可以被导出的。

    3)尝试导入数据

    ora10g@secdb /home/oracle$ imp sec/sec file=t_temp_session.dmp full=y ignore=y

    Import: Release 10.2.0.1.0 - Production on Wed Jun 29 22:07:16 2011

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -

    Production

    With the Partitioning, OLAP and Data Mining options

    Export file created by EXPORT:V10.02.01 via conventional path

    import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set

    . importing SEC's objects into SEC

    . importing SEC's objects into SEC

    Import terminated successfully without warnings.

    依然显示没有记录被导入。

    5.查看临时表空间的使用情况

    可以通过查询V$SORT_USAGE视图获得相关信息。

    sec@ora10g> select username,tablespace,session_num

    sid,sqladdr,sqlhash,segtype,extents,blocks from v$sort_usage;

    USERNAME TABLESPACE     SID SQLADDR

    SQLHASH SEGTYPE EXTENTS  BLOCKS

    -------- ---------- ------- -------- ---------- ------- ------- -------

    SEC

    TEMP           370 389AEC58

    1029988163 DATA

    1     128

    SEC

    TEMP           370 389AEC58

    1029988163 INDEX

    1     128

    可见SEC用户中创建的临时表以及其上的索引均存放在TEMP临时表空间中。

    在创建用户的时候,可以指定用户的默认临时表空间,这样不同用户在创建临时表的时候便可以使用各自的临时表空间,互不干扰。

    6.不同的session不可以互相访问对方的临时表数据

    1)在第一个session中查看临时表数据

    sec@ora10g> select * from t_temp_session;

    X

    ----------

    1

    2

    此数据为初始化环境时候插入的数据。

    2)在单独开启一个session,查看临时表数据。

    ora10g@secdb /home/oracle$ sqlplus sec/sec

    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 29 22:30:05 2011

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

    With the Partitioning, OLAP and Data Mining options

    sec@ora10g> select * from t_temp_session;

    no rows selected

    说明不同的session拥有各自独立的临时表操作特点,不同的session之间是不能互相访问数据。

    7.临时表数据将不会上DML(Data

    Manipulation Language)锁

    1)在新session中查看SEC用户下锁信息

    sec@ora10g> col username for a8

    sec@ora10g> select

    2       b.username,

    3       a.sid,

    4       b.serial#,

    5       a.type "lock type",

    6       a.id1,

    7       a.id2,

    8       a.lmode

    9  from v$lock a, v$session b

    10  where a.sid=b.sid and b.username = 'SEC'

    11  order by username,a.sid,serial#,a.type;

    no rows selected

    不存在任何锁信息。

    2)向临时表中插入数据,查看锁信息

    (1)插入数据

    sec@ora10g> insert into t_temp_session values (1);

    1 row created.

    (2)查看锁信息

    sec@ora10g> select

    2       b.username,

    3       a.sid,

    4       b.serial#,

    5       a.type "lock type",

    6       a.id1,

    7       a.id2,

    8       a.lmode

    9  from v$lock a, v$session b

    10  where a.sid=b.sid and b.username = 'SEC'

    11  order by username,a.sid,serial#,a.type;

    lock

    lock

    USERNAME        SID

    SERIAL# type

    id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    SEC

    142        425 TX

    65554

    446         6

    此时出现TO和TX类型锁。

    (3)提交数据后再次查看锁信息

    sec@ora10g> commit;

    Commit complete.

    sec@ora10g> select

    2       b.username,

    3       a.sid,

    4       b.serial#,

    5       a.type "lock type",

    6       a.id1,

    7       a.id2,

    8       a.lmode

    9  from v$lock a, v$session b

    10  where a.sid=b.sid and b.username = 'SEC'

    11  order by username,a.sid,serial#,a.type;

    lock

    lock

    USERNAME        SID

    SERIAL# type           id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    事务所TX被释放。TO锁保留。

    3)测试更新数据场景下锁信息变化

    (1)更新临时表数据

    sec@ora10g> update t_temp_session set x=100;

    1 row updated.

    (2)锁信息如下

    lock

    lock

    USERNAME        SID

    SERIAL# type

    id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    SEC

    142        425

    TX

    524317         464

    6

    (3)提交数据

    sec@ora10g> commit;

    Commit complete.

    (4)锁信息情况

    lock

    lock

    USERNAME        SID

    SERIAL# type

    id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    4)测试删除数据场景下锁信息变化

    (1)删除临时表数据

    sec@ora10g> delete from t_temp_session;

    1 row deleted.

    (2)查看锁信息

    lock

    lock

    USERNAME        SID

    SERIAL# type

    id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    SEC

    142        425

    TX

    327713         462

    6

    (3)提交数据

    sec@ora10g> commit;

    Commit complete.

    (4)锁信息情况

    lock

    lock

    USERNAME        SID

    SERIAL# type

    id1

    id2      mode

    -------- ---------- ---------- ------ ----------- ----------- ---------

    SEC

    142        425

    TO

    12125

    1         3

    5)总结

    在临时表上的增删改等DML操作都会产生TO锁和TX事务所。TO锁会从插入数据开始一直存在。

    但整个过程中都不会产生DML的TM级别锁。

    8.小结

    本文就临时表使用过程中常见的问题和特点进行了介绍。临时表作为Oracle的数据库对象,如果能够在理解这些特性基础上加以利用将会极大地改善系统性能。

    Good luck.

    secooler

    11.06.29

    -- The End --

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31448824/viewspace-2139346/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • Posted by:hzxlPosted on:2003-08-31 18:14系统临时表使用:在一些程序中,我们需要一些仅仅在程序中使用临时表,但是程序结束后就不再使用,数据库系统对这些应用提供系统临时表,关于系统临时表的生命存在周期...

    Posted by:hzxl

    Posted on:2003-08-31 18:14

    系统临时表的使用:

    在一些程序中,我们需要一些仅仅在程序中使用的临时表,但是程序结束后就不再使用,数据库系统对这些应用提供系统临时表,关于系统临时表的生命存在周期和临时表的数据存在周期说明一下:

    1、生命存在周期:

    A、理论上系统临时表是不需要显示的drop的,它是基于会话的,当系统临时表基于的连接关闭的时候,系统临时表将结束它的生命,这是最普通也是最常用的。

    B、当一个被调用对象的返回值是一个在临时表上执行的结果集,这个被调用对象执行完毕的时候,是关闭连接的,但是,这时候临时表是不消失的,这时候系统临时表在调用者结束的时候才消失。因为返回的结果集只是一个相当于指针的东西,指向临时表内存中的地址,指向临时表的指针还在使用的时候,临时表是不能drop掉的。这带来了很复杂的问题,首先:存储过程中是不能drop临时表的,而程序中没有创建临时表,也应该是不drop的,临时表什么时间drop呢?其次:我们在一个连接中,无法2次调用一个存储过程,他将告诉你临时表已经存在。可以做一个简单的例子:写一个带有临时表返回结果的存储过程,在调用存储存储过程的程序中,我们完全可以访问这个临时表。

    简单例子:

    存储过程

    /**

    * JDBC 存储过程 ADMINISTRATOR.P1

    */

    import java.sql.*; // JDBC 类

    public class P1

    {

    public static void p1 ( ResultSet[] rs ) throws SQLException, Exception

    {

    // 获取与数据库的连接

    Connection con = DriverManager.getConnection("jdbc:default:connection");

    PreparedStatement stmt = null;

    String sql;

    sql = "declare global temporary table session.temp(cc char(5)) not logged";

    stmt = con.prepareStatement( sql );

    stmt.executeUpdate();

    sql = "insert into session.temp values ('1'),('2')";

    stmt = con.prepareStatement( sql );

    stmt.executeUpdate();

    sql = "SELECT * from session.temp";

    stmt = con.prepareStatement( sql );

    rs[0] = stmt.executeQuery();

    //关闭连接(注意,这个地方在rs[0]为临时表的结果集返回的时候,stmt是无法关闭的,临时表是无法drop的,而con是可以关闭的,关闭后临时表还存在)

    if (con != null) con.close();

    }

    }

    客户端调用我直接用命令行调用的。

    db2 => connect to sample

    数据库连接信息

    数据库服务器 = DB2/NT 7.2.1

    SQL 授权标识 = ADMINIST...

    本地数据库别名 = SAMPLE

    //将自动提交设为false。

    db2 => update command options using c off

    DB20000I UPDATE COMMAND OPTIONS 命令成功完成。

    //调用过程

    db2 => call p1()

    CC

    1

    2

    "P1" RETURN_STATUS:"0"

    //看看存储过程中使用的临时表,数据是可以看到的。

    db2 => select * from session.temp

    CC

    -----

    1

    2

    2 条记录已选择。

    //一个连接中再次调用,失败了

    db2 => call p1()

    SQL0601N 要创建的对象名与类型为"DECLARED TEMPORARY TABLE" 的现存名称 "SESSION.TEMP" 相同。 SQLSTATE=42710

    //drop一下?ok,可以的

    db2 => drop table session.temp

    DB20000I SQL 命令成功完成。

    //看看还有吗?没了!

    db2 => select * from session.temp

    SQL0204N "SESSION.TEMP" 是未定义的名称。 SQLSTATE=42704

    //再次调用,成功了

    db2 => call p1()

    CC

    1

    2

    "P1" RETURN_STATUS:"0"

    C、Websphere上的程序中使用系统临时表:因为websphere的连接使用连接池的技术,这带来了好处,但是同时也带来了一些让人容易误解的地方,我们在程序中要关闭连接,很多时候看上去是关闭了数据库的连接,事实上也是这样的,但是当websphere的连接数在websphere连接池规定的连接数的范围之内的时候,程序中关闭连接是不能直接关闭数据库的连接的,连接池使连接继续保持,这时候,我们的关闭连接释放的是该连接和相关因素在websphere和java程序中使用的资源,而该连接使用的数据库资源是无法得到释放的。也就是说,当我们在该连接上使用临时表的时候,我们在程序中关闭了连接,但是临时表是还存在的,连接池中把这个连接分配给其他程序使用的时候,其他程序还可以使用这个临时表,这并不是我们想要的。这要求我们在程序的中显式的drop掉临时表。(这是在南宁解决系统临时表使用问题中,碰到的一个问题,大家可以很容易的模拟出来)

    同时这也让我们注意,一些设置,应该采取人为控制的方式,而不要采取默认,比如autoCommit,我们不能觉得程序结束了,就提交了,因为默认是程序结束提交的,如果错了就都回滚了,但是如果连接上设定的是autoCommit为true的话,程序出错就只能回滚你的出错前最后一次未提交事务,也许你还在为你程序中出现的这种错误头疼,他为什么前面的会提交呢?

    一段代码,应尽可能的保持它的独立性,执行不要过多依赖于环境和其他的代码,我想这是应该考虑的。就象在oracle数据库上执行sql和在db2数据库上执行sql有很明显的区别一样,oracle默认是不提交的,而db2默认是提交的,这样在不主动控制事务的情况下,一个sql执行的结果是完全不同的。

    2、数据存在周期

    临时表的数据是在内存中的,当你向一个临时表插入数据的时候,他同时是直接的写到硬盘中的,如果你的缓冲池可以满足临时表的数据都存在内存中,它在使用的时候是不需要读硬盘上的数据的,除非你的缓冲池不能满足,这样会降低临时表的性能。我们知道,事务的提交和回滚是对数据库的更改做永久化,从内存中的更改到硬盘上的更改或者放弃更改(在更改实现的同时,是回收曾经占用的内存资源的)。对一个永久表,插入数据,就是在你提交之前,别的程序访问不了你插入的数据,在你提交之后,所有的程序都可以访问你插入的数据;而临时表不是这样的,无论执行提交还是回滚,临时表数据占用的内存资源都将被释放,同时临时表写到硬盘上的数据也全部删除。

    也就是说,无论执行提交还是回滚,临时表的数据都没了,但是临时表还是存在的,这一点需要大家注意,在使用的过程中说插入了数据,但是没有数据,为什么呢??

    看一个简单的命令行模拟的例子:

    db2 => connect to sample

    数据库连接信息

    数据库服务器 = DB2/NT 7.2.1

    SQL 授权标识 = ADMINIST...

    本地数据库别名 = SAMPLE

    //创建临时表

    db2 => declare global temporary table session.test(col1 char(5)) not logged

    DB20000I SQL 命令成功完成。

    //插入数据

    db2 => insert into session.test values('5')

    DB20000I SQL 命令成功完成。

    //选择数据,没有数据?是的!

    db2 => select * from session.test

    COL1

    -----

    0 条记录已选择。

    //我们把提交方式改为默认不提交

    db2 => update command options using c off

    DB20000I UPDATE COMMAND OPTIONS 命令成功完成。

    //再次插入数据

    db2 => insert into session.test values('5')

    DB20000I SQL 命令成功完成。

    //选择数据,ok,我们看到数据了!

    db2 => select * from session.test

    COL1

    -----

    5

    1 条记录已选择。

    //提交一下,或者执行rollback也可以

    db2 => commit

    DB20000I SQL 命令成功完成。

    //数据没了

    db2 => select * from session.test

    COL1

    -----

    0 条记录已选择。

    以上是系统临时表使用的过程中我们程序开发者需要注意的可能出现的问题,知道问题是怎么出现的,我们应该如何解决出现的问题和如何更好的使用临时表,这是我们的目标。

    展开全文
  • MYSQL临时表使用方法

    2021-01-28 00:41:07
    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。创建临时表...

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。

    创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL

    )

    临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。

    DROP TABLE tmp_table

    如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。

    如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL

    ) TYPE = HEAP

    因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。

    正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。

    1. 临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表:

    定义字段:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL

    )

    2)直接将查询结果导入临时表

    CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name

    2. 另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快,语法如下:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL

    ) TYPE = HEAP

    3. 从上面的分析可以看出临时表的数据是会被清空的,你断开了连接就会被自动清空,但是你程序中不可能每发行一次sql就连接一次数据库吧(如果是这样的话,那就会出现你担心的问题,如果不是就没有问题),因为只有断开数据库连接才会被清空数据,在一个数据库连接里面发行多次sql的话系统是不会自动清空临时表数据的。

    展开全文
  • 在mysql数据库中创建临时表时,可以使用temporary关键字。例如:复制代码 代码示例:create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null)‘或create temporary table if not ...

    在mysql数据库中创建临时表时,可以使用temporary关键字。

    例如:

    复制代码 代码示例:

    create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null)‘

    create temporary table if not exists sp_output_tmp engine = memory select …from … where id=current_id;

    临时表只在当前连接可见,当这个连接关闭时,会自动drop。这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或使用已经存在的表,但不是临时表的表名。(当这个临时表存在时,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)。

    注意,创建临时表,必须有 create temporary table 权限。

    临时表的限制:

    临时表只能用在 memory,myisam,merge,或者innodb

    临时表不支持mysql cluster(簇)

    在同一个query语句中,你只能查找一次临时表。例如:下面的就不可用

    复制代码 代码示例:

    mysql> select * from temp_table, temp_table as t2;

    error 1137: can't reopen table: 'temp_table'

    如果在一个存储函数里,你用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,这个错误都会发生。

    show tables 语句不会列举临时表

    你不能用rename来重命名一个临时表。但是,你可以alter table代替:

    复制代码 代码示例:

    mysql>alter table orig_name rename new_name;

    临时表用完后要记得drop掉:

    复制代码 代码示例:

    drop temporary table if exists sp_output_tmp;

    展开全文
  • Mysql优化临时表使用,性能提升100倍【问题现象】线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右。SQL语句如下:SELECT DISTINCT g.*, cp.name AS cp_name...
  • 一、MySQL中的两种临时表外部临时表通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭。这种临时表的命名与非临时表可以...
  • 临时表存储 MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的MEMORY存储引擎,磁盘临时表使用MySQL的MyISAM存储引擎; 一般情况下,MySQL会先创建内存临时表,但内存临时表超过配置指定...
  • 大家就一起跟着小编学习一下,为你介绍在Mysql中的临时表使用方法。当工作在很大的表数据表上的时候,为了可以获取得到一个大量数据的小的子集,大家都应该有可能需要运行非常多查询语句。但是大家要注意一点,...
  • 用户自定义的临时表,比如:create temporary table (id int, str1 varchar(100) );SQL执行过程中产生的内部临时表,...那么这两种临时表的计数器通常show global status like '%tmp_%tables%' 来查看。比如mysq...
  • MySQL临时表

    2021-02-01 19:56:26
    临时表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就无法使用MySQL的临时表。不过现在一般很少有再使用这么低版本的MySQL数据库服务了。MySQL临时表只在当前连接可见,如果你使用PHP脚本来创建MySQL...
  • 这两天工作还行,工作的内容就是写存储过程,对于我这个没有写过存储近程的人来说,还是...其实这两个存储过程也没有什么难的,一方面我是这方面的新手,另一方面要操作一个临时表,而且要从中取得数据(没有传入值),我在网...
  • 上添加主键sec@ora10g> alter table T_TEMP_SESSION add constraint PK_T...Table altered.2)在临时表T_TEMP_SESSION上创建物化视图(1)创建物化视图日志日志sec@ora10g> create materialized view log on T_TE...
  • Oracle查询问题引发临时表使用

    千次阅读 2021-05-04 01:08:28
    我的解决办法:1、对子查询b生成临时表的时候往临时表中写入数据,查询完成即删除。 创建临时表Create Global Temporary Table b(dcard varchar(20), dcount int, dsje numeric(12, 2) )On Commit Preserve ...
  • 一、背景最近在使用MySQL5.6和5.7的过程中,碰到了两个问题。问题一由于一个大操作导致磁盘临时表暴涨,磁盘打满报错。...二、MySQL的临时表和临时文件2.1 临时表分类MySQL的临时表分为两种,一种是用户创建的临时...
  • 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实没有过多的研究,只是知道MySQL在某些特定场景下会使用临时表来辅助进行group by等一些列操作,今天就来认识下临时表吧。1、首先。临时表是session级别的,...
  • 临时表的种类与数据生命周期:临时表分为会话级临时表 和 事务级临时表。会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。事务级临时表 是指临时....
  • 当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。...
  • 额外收获知识收藏如下: 临时表存储 MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的MEMORY存储引擎,磁盘临时表使用MySQL的MyISAM存储引擎; 一般情况下,MySQL会先创建内存临时表,但...
  • CREATE GLOBAL TEMPORARY TABLE TABLENAME (COL1 VARCHAR2(10),COL2 NUMBER) ON ...--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)------------------------------------...
  • SQL SERVER临时表临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。[@more@]本地临时表的名称以单个数字符号 (#) 打...
  • 查询临时表空间的使用情况:select * from (select a.tablespace_name,sum(maxbytes/1024/1024/1024) total_G,sum(a.bytes/1024/1024) allocated_mbfrom dba_temp_files awhere a.tablespace_name=upper('XXX') ...
  • 临时表概念ORACLE数据库临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别。它只能存储在临时表空间,而非用户的表空间。ORACLE临时表是会话或事务级别的,只...
  • Hive 中的临时表使用对比说明(使用 spark-sql 测试)unionwith...ascreate temporary viewcache table 说明(使用 spark-sql 测试) 需求说明:假设我们现在有 3 张表,如下图所示,分别为 tra_stock_info 、tra_...
  • 查看临时表空间使用情况[@more@]表空间使用情况:selecta.tablespace_name,a.total_G,b.fee_G,(a.total_G-b.fee_G)/a.total_G as "used%"from(selecta.tablespace_name,sum(a.bytes)/1024/1024/1024 As total_Gfrom ...
  • 展开全部我们仍使用实验 05中的环境,略去准备数据的过程。...另一个会话 ps,用于进行 performance_schema 的观察:主会话线程号为 29,将 performance_schema 中的统计量重置,临时表的表大小限制取决于参数...
  • MySQL内部临时表策略

    2021-01-18 19:32:47
    通过对MySQL数据库源码的跟踪和调试,以及参考MySQL官方文档,对MySQL内部临时表使用策略进行整理,以便于更加深入的理解。使用内部临时表条件MySQL内部临时表使用有一定的策略,从源码中关于SQL查询是否需要内部...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 589,735
精华内容 235,894
关键字:

临时表怎么用