小编Aka*_*ash的帖子

强制索引假脱机

我知道出于性能原因应该避免它,但我试图展示一个条件,它显示为演示如何确保它不会出现。

但是,我最终得到了缺少索引警告,但优化器选择不创建临时索引。

我正在使用的查询是

SELECT 
    z.a
FROM dbo.t5 AS z WITH(INDEX(0))
WHERE 
    EXISTS 
    (
        SELECT y.a 
        FROM dbo.t4 AS y
        WHERE y.a = z.a
    )
OPTION (MAXDOP 1);
Run Code Online (Sandbox Code Playgroud)

表模式是:

CREATE TABLE dbo.t4
(
    a   integer NULL,
    b   varchar(1000) NULL,
    p   varchar(100) NULL
);

CREATE TABLE dbo.t5
(
    a   integer NULL,
    b   varchar(1000) NULL
);

CREATE UNIQUE CLUSTERED INDEX c1 
ON dbo.t5 (a);
Run Code Online (Sandbox Code Playgroud)

两个表都有 10,000 行,您可以使用以下方法进行模拟:

UPDATE STATISTICS dbo.t4 
WITH 
    ROWCOUNT = 10000, 
    PAGECOUNT = 1000;

UPDATE STATISTICS dbo.t5 
WITH 
    ROWCOUNT = …
Run Code Online (Sandbox Code Playgroud)

t-sql execution-plan sql-server-2012 index-spool

16
推荐指数
1
解决办法
1724
查看次数

为什么会立即添加具有默认约束的 NOT NULL 列?

CREATE TABLE TestTab (ID INT IDENTITY(1,1), st nvarchar(100))

INSERT INTO TestTab (st) values ('a')
INSERT INTO TestTab (st) values ('b')
INSERT INTO TestTab (st) values ('c')
INSERT INTO TestTab (st) values ('d')
INSERT INTO TestTab (st) values ('e')

INSERT INTO TestTab (st) SELECT TOP 10000 st from testtab
GO 30

ALTER TABLE TestTab ADD newcol nvarchar(10) DEFAULT 'newcol'
UPDATE TestTab SET newcol = 'newcol'  --6 sec
ALTER TABLE TestTab ADD newcol1 nvarchar(10) DEFAULT 'newcol1' NOT NULL

DROP TABLE TestTab
Run Code Online (Sandbox Code Playgroud)

当我执行这个测试脚本时, …

sql-server alter-table ddl sql-server-2012

16
推荐指数
1
解决办法
1万
查看次数

MySQL,外键,无法创建表错误 150

更新:抱歉,这是因为我忘记将 UNSIGNED 属性添加到 lang_id 列。

原文:我正在尝试在 MySQL 中创建一个带有外键的表。

我收到此错误:#1005 - 无法创建表 'xy.trans' (errno: 150)

以下创建语句有什么问题吗?

CREATE  TABLE IF NOT EXISTS `lang` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `code` CHAR(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB;


CREATE  TABLE IF NOT EXISTS `trans` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `something` TEXT NOT NULL,
  `lang_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `index_trans_lang` (`lang_id` ASC),
  CONSTRAINT `fk_trans_lang`
    FOREIGN KEY (`lang_id` )
    REFERENCES `lang` (`id` )
    ON DELETE SET NULL …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-key

7
推荐指数
1
解决办法
1万
查看次数

我应该检查存储过程中是否存在临时表?

是否有任何边缘情况建议在存储过程开始时显式检查、删除和创建临时表,而不是仅仅创建它们?

同样,是否存在在存储过程结束时显式删除它们比让 SQL Server 清理它们更可取的情况?

sql-server stored-procedures sql-server-2012 tempdb sql-server-2014

7
推荐指数
1
解决办法
7290
查看次数

DBCC TRACEON (652) 不会禁用预读读取

参考这个 StackOverflow 问题:https ://stackoverflow.com/questions/13307485/sql-server-clearing-cache-has-no-effect-on-io-stats

我使用了当时正确禁用预读功能的跟踪标志 652。

我回到了它,它不再这样做了。

询问:

DBCC DROPCLEANBUFFERS
DBCC TRACEON(652,-1)
select a.JDID,a.JDDESC from t1 a with (Index = ccsi) JOIN t2 b on a.manager = b.JDID JOIN t3 c on a.department = c.jdid
Run Code Online (Sandbox Code Playgroud)

统计数据:

Table 't1'. Scan count 4, logical reads 5884, physical reads 364, read-ahead reads 13679, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Run Code Online (Sandbox Code Playgroud)

执行计划:

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="11.0.2218.0" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="1" StatementEstRows="566392" StatementId="1" …
Run Code Online (Sandbox Code Playgroud)

sql-server-2012

6
推荐指数
1
解决办法
975
查看次数

Sql Server 中的查询成本是否计入缓冲?

如果我通过检查它们的相对“查询成本”作为性能的高级指标来比较 2 个查询,缓冲区状态是否对执行计划中显示的值有任何影响?

sql-server-2008 sql-server sql-server-2012

5
推荐指数
1
解决办法
229
查看次数

SQL Server 作业 - powershell “记录到表”在哪里保存日志

在此处输入图片说明

选择“记录到表”选项并运行作业后,当我返回此屏幕并选择“查看”时,我可以在文本文件中看到 powershell 脚本的输出。

唯一的工作步骤是调用 powershell 脚本,该脚本将字符串作为输入并在执行完 toUpper

但是,这些日志存储在哪里?

sql-server powershell

4
推荐指数
1
解决办法
3966
查看次数

为什么我的过滤索引被忽略?

--Setup, actual queries after the space
--create table fltrind (a integer,b integer)
truncate table fltrind
DROP INDEX fltrind.nf
DROP INDEX fltrind.f
DECLARE @i integer
SET @i=0
while @i<100
BEGIN
INSERT INTO fltrind(a) values(@i)
SET @i=@i+1
END
INSERT INTO fltrind(a,b) values(9000,0900)

insert into fltrind(a,b)
select top 100000 f1.a,f1.b from fltrind f1 , fltrind f2

create nonclustered index nf on fltrind(b) INCLUDE(a)
create nonclustered index f on fltrind(b) INCLUDE(a) where b is not null

UPDATE STATISTICS fltrind WITH FULLSCAN

select a from …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server filtered-index query-performance

3
推荐指数
1
解决办法
609
查看次数

启用快照隔离后阻塞继续

在 SQL Server 2012 实例上托管的数据库上,我已启用ALLOW_SNAPSHOT_ISOLATION并验证状态为ON使用

SELECT snapshot_isolation_state_desc,name from sys.databases

但是,在 2 个单独的会话中,如果我TABLOCK在第一个和UPDATE第二个中运行长时间运行的选择(反之亦然),无论哪个查询首先开始都会阻止第二个查询(根据sp_who2

看着

select * from sys.dm_exec_requests , 两个查询的事务隔离级别都是已提交读 (2)

根据我的理解,启用快照隔离后,tempdb 的使用率应该会增加,但在这种情况下不应发生阻塞。我是否缺少一些配置步骤来实现这种行为?

sql-server isolation-level snapshot-isolation blocking

3
推荐指数
2
解决办法
1735
查看次数

TSQL 中的按位运算

取以下代码:

Declare @a integer
set @a = 0
set @a = @a | cast (1 as BINARy)
set @a = @a | cast (100 as BINARy)
select cast (@a as integer)
Run Code Online (Sandbox Code Playgroud)

现在,这段代码的输出不应该是 5 吗?

我有一个整数,将它设置为 0,所以在二进制中它全是 0

然后我OR用 1 ,所以它变成 0..001

然后我OR用 100 二进制,所以它应该变成 00..0101,十进制是 5

我实际得到的输出是 101

编辑:为了更清楚,我试图用 TSQL 完成以下代码在 C++ 中的作用

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a;
a = 0;
a = a | 1;
cout<< a;
a = a …
Run Code Online (Sandbox Code Playgroud)

t-sql

1
推荐指数
1
解决办法
1012
查看次数

带有 UPDATE FROM 的 OUTPUT 子句

在下面的代码中,按OUTPUT Updated.*原样执行时失败,但删除FROM中的UPDATE并将其替换为静态值可以正常工作。OUTPUT与 一起使用时是否需要不同的语法UPDATE FROM

 USE SCRATCH

 CREATE TABLE Tab1(a char(10))
 CREATE TABLE Tab2(a char(10))
 CREATE TABLE Tab3(a char(10))

 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')

 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')

 UPDATE T1 …
Run Code Online (Sandbox Code Playgroud)

sql-server

0
推荐指数
1
解决办法
6436
查看次数