Sql server 2005 服务器将尝试选择最合适的(最有选择性的)
还要注意,在生产表上放置Sql server 2005 服务器将尝试选择最合适的(最有选择性的),sql-server-2005,stored-procedures,indexing,large-data-volumes,Sql Server 2005,Stored Procedures,Indexing,Large Data Volumes,还要注意,在生产表上放置NOLOCK提示是一个非常糟糕的主意。您可以在单个查询中进行脏读取 如果id\u ent是所有表中PRIMARY KEY的一部分,最好将其替换为常量。此查询: SELECT * FROM Transactions t JOIN TransactionTypesCurrencies ttc ON ttc.trnTypeCurrencyID = t.trnTypeCurrencyID WHERE t.id_ent = @id_ent
NOLOCK
提示是一个非常糟糕的主意。您可以在单个查询中进行脏读取
如果id\u ent
是所有表中PRIMARY KEY
的一部分,最好将其替换为常量。此查询:
SELECT *
FROM Transactions t
JOIN TransactionTypesCurrencies ttc
ON ttc.trnTypeCurrencyID = t.trnTypeCurrencyID
WHERE t.id_ent = @id_ent
AND ttc.id_ent = @id_ent
通常比这个好:
SELECT *
FROM Transactions t
JOIN TransactionTypesCurrencies ttc
ON ttc.id_ent = t.id_ent
AND ttc.trnTypeCurrencyID = t.trnTypeCurrencyID
WHERE t.id_ent = @id_ent
,因为可以进行早期筛选
如果您只有一个id\u ent
值,那么这没有什么区别,但是如果您添加另一个值,它将为自己付费
更新:
如果您有多个条件下筛选的循环查询,并且速度较慢,您可以考虑在几个条件下创建附加复合索引。
有关如何做到这一点的建议,请参阅我博客中的这篇文章:WHERE
子句中使用的所有字段上创建单独的索引,即transactionDate
、transactionStatusID
等。如果您有一个id
作为附加筛选器,请将其作为前导列包括在内:
CREATE INDEX ix_transaction_transactionDate ON transaction (id_ent, transactionDate)
CREATE INDEX ix_transaction_transactionStatusID ON transaction (id_ent, transactionStatusID)
-- etc.
请注意,对于每个查询,只使用一个索引,SQL Server
将尝试选择最合适的索引(最有选择性的索引)
还要注意,在生产表上放置NOLOCK
提示是一个非常糟糕的主意。您可以在单个查询中进行脏读取
如果id\u ent
是所有表中PRIMARY KEY
的一部分,最好将其替换为常量。此查询:
SELECT *
FROM Transactions t
JOIN TransactionTypesCurrencies ttc
ON ttc.trnTypeCurrencyID = t.trnTypeCurrencyID
WHERE t.id_ent = @id_ent
AND ttc.id_ent = @id_ent
通常比这个好:
SELECT *
FROM Transactions t
JOIN TransactionTypesCurrencies ttc
ON ttc.id_ent = t.id_ent
AND ttc.trnTypeCurrencyID = t.trnTypeCurrencyID
WHERE t.id_ent = @id_ent
,因为可以进行早期筛选
如果您只有一个id\u ent
值,那么这没有什么区别,但是如果您添加另一个值,它将为自己付费
更新:
如果您有多个条件下筛选的循环查询,并且速度较慢,您可以考虑在几个条件下创建附加复合索引。
有关如何做到这一点的建议,请参阅我博客中的这篇文章:创建的索引越多,插入所需的工作就越多,因此,在搜索的所有内容上创建索引可能不是一个好主意。您可以通过使用探查器记录工作负载,然后使用索引调整向导来确定最能处理工作负载的索引,从而获得一些经验信息
创建的索引越多,插入所需的工作就越多,因此在搜索的所有内容上创建索引可能不是一个好主意。我发现在这种情况下,创建临时表比创建普通表表达式更快。这还允许您返回分页的总数。我发现在这种情况下,创建临时表比创建公共表表达式更快。这还允许您返回分页的总数。在创建索引之前,我会问自己一些问题:
在创建索引之前我问自己的问题:
提前谢谢。问题是,我可以搜索任何字段组合,可以是日期和交易类型,也可以是交易类型和用户ID等。。。另一件事是创建这个表的人将字段Id作为主键的一部分(Id+transactionID)