最近为了缓解千万级数据表的频繁查询压力,采用了临时表,整个流程是:
1.CREATE TEMPORARY TABLE IF NOT EXISTS XXX ……
2.查询操作
3.DROP TEMPORARY TABLE XXX
简单那测试运行正常。
但是在正式使用过程中时不时会出现:table or view does not exist……,起初以为是CREATE TEMPORARY TABLE的过程出了问题,查询log后发现没有此异常,说明不是在CREATE TEMPORARY TABLE的问题。
百思不得其解,之后查询mysql手册:
引用
在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)
恍然大悟,原来是整个流程的3步操作出了问题。
整个流程的3步操都是通过连接池来实现的,1,2,3三个操作在访问量小的时候很有可能使用的是连接池中的同一个连接,这时一切正常表面上看不出来任何问题。但是当访问量大的时候,这3个操作就很有可能就使用了不同的连接,这时就会抛出临时表不存在的异常。
解决办法:1,2,3三个操作采用同一个数据库连接。
分享到:
相关推荐
### MySQL临时表使用详解 #### 引言 在处理大规模数据集时,高效的数据操作成为了一项关键技能。MySQL作为一款广泛使用的数据库管理系统,提供了多种工具和策略来优化查询性能。其中,临时表是一个尤为重要的特性...
MySQL临时表是一种在会话范围内创建的特殊类型的表,它仅对当前会话可见,并在会话结束时自动删除。这种技术在处理复杂查询、中间数据处理或报表生成时非常有用,因为它允许用户将查询结果暂存起来,以便进一步处理...
### MySQL临时表与派生表详解 #### 一、MySQL临时表 **1.1 临时表概述** MySQL中的临时表是一种特殊的表类型,主要用于存储临时数据或中间结果集,适用于那些需要多次查询同一结果集的场景。根据存储位置的不同,...
- 使用`SQL_SMALL_RESULT`选项时,MySQL倾向于使用内存中的临时表。 - `DISTINCT`与`ORDER BY`结合使用时也可能需要临时表的支持。 2. **磁盘临时表的生成** - 如果查询中包含`BLOB`或`TEXT`类型的字段,那么...
接下来,我将详细介绍关于MySQL临时表的创建语法、使用实例和一些注意事项。 首先,创建临时表的基本语法和创建普通表的语法是相似的。我们通常会在创建时加上TEMPORARY关键字,这样就指明了这是一个临时表。例如,...
MySQL中的临时表是一种非常实用的工具,特别是在处理复杂的数据操作和优化查询性能时。下面将详细解释临时表的使用方法及其特点。 1. **临时表的创建与生命周期** 创建临时表的方式很简单,只需将常规的`CREATE ...
使用MySQL临时表,有时是可以加速查询的,下面就为您详细介绍使用MySQL临时表加速查询的方法。 把表的一个子集进行排序并创建MySQL临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器...
pymysql+mysql通过读取临时表数据更新或插入主表,原创手写已测可运行效果好。
Mysql 存储过程,函数,临时表 存储过程包括输入返回,可供项目中遇到难题的人解决一下,我曾为此费了好大精力,最后总结出来共大家分享
1.背景MySQL包括两类临时表,一类是通过create temporary table创建的临时表,一类是在query过程中using temporary而创
创建MySQL临时表的方法非常简单,只需要使用`CREATE TEMPORARY TABLE`语句,其基本语法如下: ```sql CREATE TEMPORARY TABLE tbl_name ( column1 datatype, column2 datatype, ... columnN datatype ) [table_...
MySQL临时表是一种在数据库会话期间创建和使用的特殊类型的表,它们主要用于存储中间查询结果,以便在复杂的查询或处理大量数据时提高性能。临时表的名字只对当前会话可见,这意味着其他用户无法看到或访问你的临时...
这里我们使用Mybatis的注解来定义SQL语句,`@Insert`用于创建临时表,`@Select`用于查询临时表中的数据。注意,临时表在会话结束时会被自动删除,所以它们只对当前连接可见。 接着,我们需要创建一个对应的实体类`...
5. **优化查询以减少临时表使用** 优化查询语句,减少对临时表的依赖。例如: - 使用 `JOIN` 代替子查询。 - 避免在 `WHERE` 子句中使用复杂的表达式。 ```sql SELECT * FROM orders JOIN customers ON ...
以下是一些可能导致内部临时表使用的操作: 1. 使用`SQL_BUFFER_RESULT`提示:这可以使MySQL将结果集缓冲到临时表中,以减少锁的占用时间。例如,`SELECT SQL_BUFFER_RESULT * FROM t1`。 2. 含有派生表(Derived ...
MySQL中的临时表是一种特殊类型的表...在编写涉及临时表的复杂查询或存储过程时,确保遵循最佳实践,合理使用并及时清理,可以有效防止此类问题的发生。如果遇到问题,可以参考MySQL的官方文档或在线社区寻找解决方案。
3. 合理使用索引可以显著提升查询速度,避免不必要的临时表使用。 4. 在长时间运行的事务或连接中,如果频繁使用临时表,应考虑适时手动删除不再需要的临时表,以释放资源。 总结来说,MySQL的临时表和派生表是优化...
标签中的"Delphi实现"指的是Delphi编程语言的使用,"创建Mysql库的临时表"是指在MySQL数据库中创建临时数据存储结构,"使用ODBC实现"是指通过ODBC接口与MySQL进行交互,"数据库"涵盖了整个数据库操作的范围。...