我需要执行250万次查询.此查询生成我需要的一些行,AVG(column)然后使用它AVG来从低于平均值的所有值中过滤表.然后我需要将INSERT这些过滤结果放入表格中.
以合理的效率执行此类操作的唯一方法似乎是TEMPORARY TABLE为每个query-postmaster python-thread 创建一个.我只是希望这些TEMPORARY TABLEs不会被持久化到硬盘驱动器(根本)并且将保留在内存(RAM)中,当然,除非它们没有工作内存.
我想知道TEMPORARY TABLE是否会引发磁盘写入(这会干扰INSERTS,即整个进程缓慢)
我正在使用SQL Server 2008.假设我创建了一个像这样的临时表:
create table #MyTempTable (col1 int,col2 varchar(10))
Run Code Online (Sandbox Code Playgroud)
如何动态检索字段列表?我想看到这样的事情:
Fields:
col1
col2
Run Code Online (Sandbox Code Playgroud)
我在考虑查询sys.columns但它似乎没有存储任何关于临时表的信息.有任何想法吗?
我有一个存储函数,我使用临时表.出于性能原因,我需要该表中的索引.不幸的是,我无法使用,ALTER TABLE因为这会导致隐式提交.
所以我在寻找的语法来添加INDEX对tempid创建过程中.任何人都可以帮忙吗?
CREATE TEMPORARY TABLE tmpLivecheck
(
tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM tblLivecheck_copy
WHERE tblLivecheck_copy.devId = did;
Run Code Online (Sandbox Code Playgroud) 我意识到临时表是会话/连接绑定的,不可见或可从会话/连接访问.
我有一个长期运行的存储过程,在各个阶段创建临时表.
有没有办法可以看到当前临时表的列表?我需要什么特权才能这样做?
或者,
有没有办法可以看到正在运行的存储过程中执行的特定SQL语句?该过程作为SQL Server中的计划作业运行.
我正在使用SQL Server 2000.
谢谢你的指导.
我在一个存储过程中查询,该存储过程使用一些动态SQL调用某些链接服务器.我知道EF不喜欢这样,所以我特意列出了所有要返回的列.然而,它仍然不喜欢这样.我在这做错了什么?我只是希望EF能够检测从存储过程返回的列,以便我可以创建我需要的类.
请参阅以下代码,它构成了我的存储过程的最后几行:
SELECT
#TempMain.ID,
#TempMain.Class_Data,
#TempMain.Web_Store_Class1,
#TempMain.Web_Store_Class2,
#TempMain.Web_Store_Status,
#TempMain.Cur_1pc_Cat51_Price,
#TempMain.Cur_1pc_Cat52_Price,
#TempMain.Cur_1pc_Cat61_Price,
#TempMain.Cur_1pc_Cat62_Price,
#TempMain.Cur_1pc_Cat63_Price,
#TempMain.Flat_Length,
#TempMain.Flat_Width,
#TempMain.Item_Height,
#TempMain.Item_Weight,
#TempMain.Um,
#TempMain.Lead_Time_Code,
#TempMain.Wp_Image_Nme,
#TempMain.Wp_Mod_Dte,
#TempMain.Catalog_Price_Chg_Dt,
#TempMain.Description,
#TempMain.Supersede_Ctl,
#TempMain.Supersede_Pn,
TempDesc.Cust_Desc,
TempMfgr.Mfgr_Item_Nbr,
TempMfgr.Mfgr_Name,
TempMfgr.Vendor_ID
FROM
#TempMain
LEFT JOIN TempDesc ON #TempMain.ID = TempDesc.ID
LEFT JOIN TempMfgr ON #TempMain.ID = TempMfgr.ID
Run Code Online (Sandbox Code Playgroud) 是否有任何SQL子查询语法允许您从字面上定义临时表?
例如,像
SELECT
MAX(count) AS max,
COUNT(*) AS count
FROM
(
(1 AS id, 7 AS count),
(2, 6),
(3, 13),
(4, 12),
(5, 9)
) AS mytable
INNER JOIN someothertable ON someothertable.id=mytable.id
Run Code Online (Sandbox Code Playgroud)
这将节省必须执行两个或三个查询:创建临时表,将数据放入其中,然后在连接中使用它.
我正在使用MySQL,但会对其他可以做类似事情的数据库感兴趣.
我正在尝试创建一个临时表,只选择某个数据register_type.我写了这个查询,但它不起作用:
$ CREATE TABLE temp1
(Select
egauge.dataid,
egauge.register_type,
egauge.timestamp_localtime,
egauge.read_value_avg
from rawdata.egauge
where register_type like '%gen%'
order by dataid, timestamp_localtime ) $
Run Code Online (Sandbox Code Playgroud)
我正在使用PostgreSQL.
你能告诉我查询有什么问题吗?
我在SQL Server中有以下问题,我有一些看起来像这样的代码:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到一个错误'数据库中已经有一个名为'#TMPGUARDIAN'的对象'.谁能告诉我为什么我会收到这个错误?
我正在使用SQL Server 2000,并且许多存储过程都广泛使用临时表.数据库有很多流量,我担心创建和删除临时表的线程安全性.
假设我有一个存储过程,它创建了一些临时表,它甚至可以将临时表连接到其他临时表等.还可以说两个用户同时执行存储过程.
是否有可能一个用户运行sp并创建一个名为#temp的临时表,另一个用户运行相同的sp但是因为数据库中已经存在一个名为#temp的表而被停止了?
如果同一个用户在同一个连接上执行两次相同的存储过程怎么样?
是否有任何其他奇怪的场景可能导致两个用户查询相互干扰?
我有一个问题来决定是使用视图还是临时表.
我有一个存储过程,我从程序调用.在该SP中,我将长查询的结果存储在临时表中,命名列并在该表上进行另一个查询,将结果存储在标签或网格视图或其他内容中,然后删除临时表.我还可以将查询结果存储在视图中并对该视图进行查询.那么什么是更好或者在什么情况下我必须使用VIEW/Temp表.
根据我的研究,视图具有以下优点:安全性,简单性和列名称规范.我的临时表也完成了所有这些(根据我的意见).
temp-tables ×10
sql ×6
sql-server ×6
mysql ×2
postgresql ×2
ddl ×1
optimization ×1
performance ×1
subquery ×1
t-sql ×1
view ×1