当我们添加或删除新索引以加速某些事情时,我们最终可能会放慢速度.为了防止这种情况,在创建新索引后,我正在执行以下步骤:
这是一种自动化的,可以满足我的需求.但是,我不确定是否有更好的方法.是否有一些工具可以满足我的需求?
编辑1投票结束我的问题的人,你能解释一下你的理由吗?
编辑2我搜索了,但没有找到任何解释如何添加索引可以减慢选择.然而,这是一个众所周知的事实,所以应该有某种东西.如果什么都没有出现,我可以稍后写几个例子.
编辑3一个这样的例子是:两列高度相关,如身高和体重.我们有一个高度索引,对我们的查询来说没有足够的选择性.我们在权重上添加一个索引,并运行一个包含两个条件的查询:高度范围和权重范围.因为优化器不知道相关性,所以它严重低估了查询的基数.
另一个例子是在增加列上添加索引(例如OrderDate)会严重减慢查询的速度,如OrderDate> SomeDateAfterCreatingTheIndex.
sql-server query-optimization sql-server-2008 sql-server-2008-r2
是否可以从SQL Server 2008中不是主键的create table语句创建聚簇索引?
这个目的是针对SQL Azure中的表,因此我不能首先创建表,然后在表上创建聚簇索引.
编辑:显然它是导致我的问题的FluentMigrator,它的版本表没有聚集索引,因此尝试创建版本控制表而不是我的表是错误的.
sql-server clustered-index sql-server-2008 sql-server-2008-r2 azure-sql-database
大多数情况下,当我在SSMS中生成脚本时,我必须在" 生成和发布脚本"向导中更改完全相同数量的设置.有没有办法在此向导中设置默认值(特别是在" 高级脚本选项"对话框中?
如果没有,有没有人有任何有趣的方式来促进这种需求?
我知道存储了用户定义的类型information_schema.domains,但是是否可以获得类型类型的定义table type?
要清楚我正在寻找实际的表类型定义:
例如,我想获取列定义 myTableType
CREATE TYPE myTableType AS TABLE(
Id INT,
SomeValue NVARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud) 我正在构建一个报告,我希望接受用户的两个值,将这些值提供给查询,并查找与这些条目关联的数据.
例如,如果您有一份员工,绩效衡量标准和与之相关的值列表; 然后,用户将选择员工姓名/绩效度量,他们将获得该员工对该度量的评分信息.
我有两个参数,每个参数都是从SQL查询填充得到一个不同的员工姓名和度量列表,下面的表只是根据~'WHERE name = @Name AND measure = @Measure'提取信息但是当我点击'预览'在本地运行报告我收到错误:"尚未指定运行报告所需的一个或多个参数"
我知道参数工作正常,因为我可以将它们的值直接输入到文本框中,并且值正确填充.此外,如果我将查询更改为只接受一个参数(即WHERE measure = @Measure),查询将起作用.
我很困惑为什么发生这个错误,因为我知道我的参数正在运行并正确填充.
使用CTE's(common table expressions)而不是使用是否有好处temp tables.
我在两者之间进行了性能测试,但我发现它们之间没有太大区别.
使用的优点和缺点是CTE'S什么?
sql t-sql temp-tables common-table-expression sql-server-2008-r2
在简单数据库中使用数据库图时,SQL Server在Table\Systam Tables节点中创建一个dbo.sysdiagrams表(在Microsoft management studio\object explorer中).但sysdiagrams表在SQL Server中标记为用户表.您可以通过以下查询获取用户表.
SELECT *
FROM sys.tables t
WHERE OBJECTPROPERTY(t.object_id,'IsUserTable') = 1
Run Code Online (Sandbox Code Playgroud)

我不知道sysdiagram表是系统表还是用户表.
存在microsoft_database_tools_support的值1在sysdiagram的扩展属性中,它确定自动创建的表.

sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012
我使用SQL Server,我有3个应用程序服务器.当我的数据库中的表发生更改时,我需要向那些应用程序服务器刷新本地缓存的数据.我使用触发器来进行已知更改并通过服务代理队列发送消息.然后我创建一个存储过程并分配它来激活我的队列的存储过程,在这个存储过程中我收到消息,但我不知道如何在我的应用程序中调用refresh方法.
c# sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012
我们使用SQL Server Management Studio 2008 R2.IntelliSense完美地与sa帐户配合使用.但它不能与Windows身份验证用户一起使用.用户可以访问具有db_owner角色的主数据库,但它不是sysadmin.
如何解决这个问题?
基本上我试图给用户一个特定的密码,所以我可以在系统上测试一些功能,因为我只有我们的管理员帐户,我不能玩,我只是选择一个随机帐户,所以我可以做我的测试.所以这是我尝试更新:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY)
WHERE LoginID=10947
Run Code Online (Sandbox Code Playgroud)
它运行正常,但数据库中的代码看起来是日语的一个,而另一个的语法看起来很好,但它不是我输入的值,我希望它使用我输入的确切值,所以我可以登录.如何我这样做吗?我已经尝试了几种不同的演员和转换解决方案而没有运气.