我一直在CROSS / OUTER APPLY
和同事一起看,我们正在努力寻找现实生活中使用它们的例子.
我花了很多时间看看我何时应该使用Cross Apply而不是Inner Join?和谷歌搜索但主要(唯一)的例子似乎很奇怪(使用表中的行数来确定从另一个表中选择多少行).
我认为这种情况可能会受益于OUTER APPLY
:
联系人表(每个联系人包含1条记录)通讯条目表(每个联系人可以包含n个电话,传真,电子邮件)
但是使用子查询,公共表表达式,OUTER JOIN
与RANK()
和OUTER APPLY
似乎都同样执行.我猜这意味着该方案不适用于APPLY
.
请分享一些现实生活中的例子并帮助解释这个功能!
我有一个相对较大的表(目前有200万条记录),并想知道是否有可能提高即席查询的性能.ad-hoc这个词在这里是关键.添加索引不是一个选项(最常见的列上已有索引).
运行简单查询以返回最近更新的100条记录:
select top 100 * from ER101_ACCT_ORDER_DTL order by er101_upd_date_iso desc
Run Code Online (Sandbox Code Playgroud)
需要几分钟.见下面的执行计划:
表扫描的其他详细信息:
SQL Server Execution Times:
CPU time = 3945 ms, elapsed time = 148524 ms.
Run Code Online (Sandbox Code Playgroud)
服务器非常强大(从内存48GB内存,24核心处理器)运行sql server 2008 r2 x64.
更新
我发现这个代码创建了一个包含1,000,000条记录的表.我想我可以SELECT TOP 100 * FROM testEnvironment ORDER BY mailAddress DESC
在几台不同的服务器上运行,看看我的磁盘访问速度是否在服务器上很差.
WITH t1(N) AS (SELECT 1 UNION ALL SELECT 1),
t2(N) AS (SELECT 1 FROM t1 x, t1 y),
t3(N) AS (SELECT 1 FROM t2 x, t2 y),
Tally(N) AS (SELECT TOP 98 …
Run Code Online (Sandbox Code Playgroud) 代码适用于我的Genymotion Android 4.4.4仿真器,但不适用于我正在使用的设备(4.4.2).
我已经尝试了很多"信任所有证书"的解决方法,但无济于事(我认为这不是问题,因为证书是AOK).
我想我已经识别出密码(使用桌面上的wireshark跟踪); TLS 0x00 0x1E似乎有点罕见?
知道怎么解决?
这是我的代码
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
CloseableHttpClient client = HttpClientBuilder.create().setSSLSocketFactory(sslsf).build();
String baseURL = "https://mysite.co.uk/api/";
HttpGetHC4 request = new HttpGetHC4(baseURL + "/authenticate?user=abcd&password=1234");
CloseableHttpResponse response = client.execute(request);
Run Code Online (Sandbox Code Playgroud)
而且错误;
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6abff398: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:744 0x684dfce0:0x00000000)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:449)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:340)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:281)
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:124)
at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:322)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:373)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:225)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:178)
at …
Run Code Online (Sandbox Code Playgroud) MailMessage message = new MailMessage();
message.Subject = "test";
message.Body = "test";
message.To.Add("test@gmail.com");
message.From = new MailAddress("bob@internalhost.com");
SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Host = "172.22.0.20";
smtp.Port = 25;
smtp.Send(message);
Run Code Online (Sandbox Code Playgroud)
知道为什么我可能会收到错误
无法解析远程名称.
显然,由于我已经指定了IP地址,因此无需解析.我可以在端口25上ping IP甚至telnet并成功发送电子邮件.但是,我无法发送电子邮件.
我跑了一个wireshark
跟踪,看起来没有任何流量发送到172.22.0.20
有没有办法从SQL服务器中的字符串/字段中删除特殊字符(只留下字母数字)而没有循环/自定义函数?
到目前为止,我提出的最好的是:
Create Function [dbo].[strip_special](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^a-z0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^a-z0-9]%', @Temp), 1, '')
Return @TEmp
End
Run Code Online (Sandbox Code Playgroud)
在某些服务器上,我没有创建用户定义函数的权限,所以我希望能够在没有的情况下实现相同的结果.我也担心循环的效率/性能(虽然我猜即使内置函数/方法本身也可能使用循环).
谢谢
我想分享我的一个Android模拟器,并试图弄清楚需要什么.
我已复制我的c:\users\me\appdata\local\android\sdk
文件夹,但平台文件夹除外,似乎不需要.随我的.avd
文件夹和相应的.ini
.虽然这个工作很大,我想看看我是否可以减少它.
我得到的印象是只需要system-images文件夹来创建一个新的虚拟机,但出于某种原因,如果我尝试启动我avd
没有所需的系统映像,我会收到错误.为什么需要系统映像?
我的文件是什么.avd
;
userdata.img
userdata-qemu.img
userdata-qemu.img.qcow2
我可以删除sdk文件夹中的其他文件夹吗?
在几个实例中,我的虚拟机似乎已重置(即所有配置和已安装的应用程序都已消失).是否有任何明显的事件可能导致这种情况?
没有太多细节,我有一个查询使用所有聚集和非聚集索引搜索产生执行计划(听起来很有希望).不幸的是,查询表现不佳,我很难理解为什么.
我正在使用set statistics io on
并且可以看到其中一个表产生了大量扫描和逻辑/物理读取:
SET statistics io ON
go
SELECT order_number,
audit_id,
orderadmission_net_paid_delta / 100.00,
'Admission',
orderadmission_net_paid_delta / 100.00,
performance_gl_description1,
section_data1,
performance_gl_code,
price_type_data1,
year(performance_start_date),
month(performance_start_date),
paymentmethod_type,
paymentmethod_name,
''
FROM JCRProdReplication.dbo.ts_audit WITH (NOLOCK)
JOIN JCRProdReplication.dbo.ts_order_admission WITH (NOLOCK)
ON orderadmission_audit_id = audit_id
LEFT JOIN JCRProdReplication.dbo.ts_order WITH (NOLOCK)
ON order_id = orderadmission_order_id
LEFT JOIN JCRProdReplication.dbo.ts_performance WITH (NOLOCK)
ON performance_id = orderadmission_performance_id
LEFT JOIN JCRProdReplication.dbo.ts_seat WITH (NOLOCK)
ON seat_id = orderadmission_seat_id
LEFT JOIN JCRProdReplication.dbo.ts_section WITH (NOLOCK)
ON section_id = seat_section_id
LEFT …
Run Code Online (Sandbox Code Playgroud) 我目前有一个视图列的行:
ID, Name
我想添加第三列Properties
,其中必须包含以逗号分隔的属性列表.我可以从连接表中获取属性,但是当前连接将为每个属性返回一个单独的行.为逗号分隔列表提取单行的最佳方法是什么?
在过去,我认为我已经使用了带有游标的用户定义函数.如果我能在没有UDF的情况下做到这一点,那就太棒了,但我不是百分百肯定的.如果没有,我确信我可以用更智能的UDF去除光标.
我敢肯定我可能只是在忘记或过于复杂......但这是我的情景:
iso_date
01/01/01
02/01/01
03/01/01
04/01/01
Run Code Online (Sandbox Code Playgroud)
venue
All London
London Tower
London Bridge
Millenium Bridge
Run Code Online (Sandbox Code Playgroud)
master_venue, child_venue
All London, All London
All London, London Tower
All London, London Bridge
All London, Millenium Bridge
London Tower, London Tower
London Bridge, London Bridge
Millenium Bridge, Millenium Bridge
Run Code Online (Sandbox Code Playgroud)
iso_date, venue, event
01/01/01, All London, 1
02/01/01, London Tower, 2
02/01/01, Millenium Bridge, 3
04/01/01, London Bridge, 4
Run Code Online (Sandbox Code Playgroud)
event, status
1, 1
2, 0
3, 1
4, 1
Run Code Online (Sandbox Code Playgroud)
现在我想加入这些表格,这样我每天都可以获得每个场地的记录,无论是否已经预订.如果场地有预订,我只想在事件状态为1时看到它. …
有一个搜索,只发现SSRS 2005和2008之间的差异列出2005年和2008年之间的"唯一"差异是tablix(表格+矩阵)控制的引入.
还有别的吗?那么2008年 - > 2008年R2?
谢谢
有没有办法不循环遍历整个哈希表来删除具有指定值的键值对?
如果没有 - 是否有更好的类型我可以使用哪个允许我这样做?
这里有一些关于我正在做什么的背景知识.我确定我过于复杂,而且有更好的方法......
我有一个键/值列表,其中键是"源"电子表格中的列名称,值是"目标"系统中的字段名称.
当我遍历"源"中的列并匹配哈希表中的键时,我可以删除对.
完成后,"源"中可能有列,哈希表中没有匹配的键.用户可以通过选择其中一个剩余值来覆盖它.
这是我需要从哈希表中删除该键/值的地方.