我需要做一个非常复杂的查询.有一次,这个查询必须连接到一个不幸被编入索引的视图.此视图也是连接大表的复杂视图.
View的输出可以简化为:
PID (int), Kind (int), Date (date), D1,D2..DN
Run Code Online (Sandbox Code Playgroud)
其中PID和日期和种类字段不是唯一的(可能有多个行具有相同的pid,种类,日期组合),但是那些将用于连接的行如此
left join ComplexView mkcs on mkcs.PID=q4.PersonID and mkcs.Date=q4.date and mkcs.Kind=1
left join ComplexView mkcl on mkcl.PID=q4.PersonID and mkcl.Date=q4.date and mkcl.Kind=2
left join ComplexView mkco on mkco.PID=q4.PersonID and mkco.Date=q4.date and mkco.Kind=3
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做,查询的执行需要很长时间,因为复杂的视图运行了三次我假设,并且在其大量行中只有一些实际使用(例如,40000只有2000只是用过的)
我所做的是声明@temptable,并从ComplexView中插入@temptable select*,其中Date ... - 每次查询一次我只选择我将从我的ComplexView中使用的行,然后我加入这个@temptable.
这显着缩短了执行时间.
但是,我注意到,如果我在我的数据库中创建一个表,并在PID,Kind,Date(非唯一聚簇)上添加聚簇索引并从该表中获取数据,那么从该表执行delete*并插入到此复杂视图中的表需要几秒钟(3或4),然后在我的查询中使用此表(左连接三次)将查询时间从1分钟缩短到30秒!
所以,我的问题是,首先 - 是否可以在声明的@temptables上创建索引.然后 - 我看到人们谈论"创建#temptable"语法.也许这就是我需要的?我在哪里可以读到声明@temptable和create #temptable之间的区别?我应该如何使用我的查询?(此查询适用于MS Reporting Services报告,如果重要的话).
我需要捕获我在键盘上键入的所有内容,然后以多种方式存储它.我更喜欢用C#编写.Net,但任何事情都会真的.我写这个"键盘记录器"的理由很简单:
最近我成了Peregrine游戏手套的拥有者.这是一个非常酷的东西,它允许你通过用手指做出手势来发出命令,同时,它是一个非常薄的手套,所以你可以用那只手轻轻打字.
此外,我找到了一个名为AutoHotkey的好程序,可以通过为任何操作制作宏来严重提高您的工作效率.您可以将任何键绑定到任何其他键或一系列键或命令.
问题是,你不能说它就像"这是我正在做的最多"和"这是我很少使用的东西".真的,你能说出你使用更多的键,页面向下还是向下?你更频繁地使用alt + tab逃脱或布局切换(ctrl-shift或alt-shift)?我说不出来.在没有统计数据的情况下,我不知道应该自动切换哪些动作或切换到更简单的界面.
所以我想写一个程序在后台运行并记录我输入的所有内容.然后该程序将存储我的动作的第一,第二和第三顺序直方图(例如,它将存储我按下任何一个键的次数,例如输入,我按下连续两个键的次数,例如alt和then tab,多少次我按下三个键的连续,如ctrl,alt然后删除或ctrl,shift然后转义)
然后,经过一段时间工作/播放/无论如何,我将获得有关我应该尝试绑定到该界面(手套)的操作类型或使用AutoHotkey程序自动执行的信息,以提高与PC交互的速度.
换句话说,简单的科学实验,只是为了好玩和进步:)
.net ×1
c# ×1
capture ×1
indexing ×1
keystroke ×1
keystrokes ×1
sql ×1
t-sql ×1
temp-tables ×1