我需要执行一个sql查询,它将显示以下内容:
‘截至当前日期超过90天的活动帐户总数’
日期来自sql查询,如下所示:
select date from currentdatetable
现在我的查询是计算来自accountstable的所有活动帐户,所以我的查询是这样的:
select count(*) from accountstable
我的问题是,如何声明accountstable表中的日期比当前日期表的日期早于90天?
我当前的代码:
select count(*) from accountstable at where at.date > (select date from
我希望使用实体框架创建一个具有WHERE条件的唯一索引。
public class Person {
public string Name { get; set; }
public bool Expired { get; set; }
}
条件是只有在“过期”为false时,名称才是唯一的。
索引将如下所示:
CREATE UNIQUE INDEX [IX_Person]
ON Person(Name)
WHERE [Expired] = 0;
有什么方法可以用代码优先来编写这个唯一的索引,而不必在迁移中执行这个SQL?
我可以写这个:
[Index
假设有人来找您,说我们将通过用IN替换equals来减少我们编写的SQL的数量。这种用法既适用于单个标量值,也适用于数字列表。
SELECT *
FROM table
WHERE id = 1
或
SELECT *
FROM table
WHERE id IN (1)
这些语句是否等同于优化器所产生的结果?
从表面上看,这看起来很简单,但它导致了简化,原因有两个:
大型SQL块不需要复制我们不会过度使用动态SQL.
示例
这是一个人为的例子,但请考虑以下几点:
SELECT a.*
FROM tablea a
JOIN tableb b ON a.id = b.
请考虑以下情况:
我有一个MySQL表,名为actor。(是的,它来自Sakila样本DB)。
表中有一个名为last_name的varchar列。
列上有一个(非主)键。
打开MySQL安全更新模式。
当我运行这个查询时,它可以工作:
DELETE FROM actor WHERE last_name = 'foo';
当我运行这个查询时:
DELETE FROM actor WHERE last_name LIKE '%fo' OR last_name LIKE 'fo%';
此错误消息失败:
错误代码: 1175。
编译器是否会优化格式化得很好的字符串,或者代码的运行速度会比那些无法以可读方式分割的字符串慢吗?
例如
string sql =
"select * " +
"from person " +
"where id = :id";
或
string sql = "select * from person where id = :id";
这只是一个小例子。您知道sql可能会变得多么复杂。
我正在使用SQL Server 2012。
我正在尝试优化一个查询,如下所示:
SELECT TOP 20 ta.id,
ta.name,
ta.amt,
tb.id,
tb.name,
tc.name,
tc.id,
tc.descr
FROM a ta
INNER JOIN b tb
ON ta.id = tb.id
我有以下两个SQL语句
第一个:
IF(@User_Id IS NULL)
BEGIN
SELECT *
FROM [UserTable]
END
ELSE
BEGIN
SELECT *
FROM [UserTable] AS u
WHERE u.[Id] = @User_Id
END
第二个:
SELECT *
FROM [UserTable] AS u
WHERE (@User_Id IS NULL OR u.[Id] = @Us
我有一个只有一个列的表,我用两种方式查询它:
SELECT * FROM sequences WHERE seqs="blablabla"
SELECT * FROM sequences WHERE seqs LIKE "blablabla%"
要使这些查询使用索引,我似乎需要两个索引(每个查询类型一个),如下所示:
用于第一个查询的CREATE INDEX test_nocol ON sequences(seqs)。
用于第二个查询的CREATE INDEX seqs_index ON sequences(seqs COLLATE NO
我想知道是否有一种方法可以执行这种查询(可选的where子句),而不会对sql施加这样的负载。
SELECT *
FROM TABLE
WHERE
Name = IsNull(@Name,Name)
AND (
(@MinAge IS NULL AND @MaxAge IS NULL)
OR
(@MinAge IS NOT NULL AND @MaxAge IS NOT NULL AND Age BETWEEN @MinAge AND @MaxAge)
)
我知道我可以使用EXEC将其作为变量执行,并在需要的地方包含
我有一个基本的查询,从6秒到1秒,只需将一个连接从LEFT JOIN更改为LEFT HASH JOIN或“左循环连接”即可。有人能解释为什么这会导致性能的大幅度提高,以及为什么SQL的优化器没有自己解决这个问题吗?
以下是SQL的大致样子:
SELECT
a.[ID]
FROM
[TableA] a
LEFT HASH JOIN
[TableB] b
ON b.[ID] = a.[TableB_ID]
JOIN
[TableC] c
ON c.[ID] = a.[TableC_ID]
WHERE
a.[SomeDate] IS NULL AND
我使用WITH (ROWLOCK)更新了表的一行,但是通过执行"sp_lock“,我可以看到整个表是被锁定的。因此,在提交事务之前,其他事务无法更新表的其他行。为什么"WITH (ROWLOCK)“不起作用?
我在对rowlock使用以下查询:
DELETE FROM DefDatabaseSession WITH (ROWLOCK) WHERE ProcessName='test';
同时,在对同一表中的差异行运行相同删除操作的任何其他事务中,我将得到异常。
超出了SQLServer JDBC DriverLock请求超时时间。嵌套异常是java.sql.
我注意到,包含ROW_NUMER()代码的预准备语句经常被重新编译,尽管它们的SQL代码没有改变。
(来自《Microsoft SQL Server 2008: T-SQL查询》一书中的示例):
WITH SalesRN AS (
SELECT
ROW_NUMBER() OVER (ORDER BY qty, empid) AS rownum,
empid,
mgrid,
qty
FROM
dbo.SalesOrder
)
SELECT
rownum,
empid,
mgrid,
qty
FROM
SalesRN
WHERE
rownum > 100