1

どのクエリを高速にする必要がありますか

UPDATE table1
SET field1 = COALESCE(field1, someValue)
WHERE foreignKeyField = someKeyValue

また

UPDATE table1
SET field1 = someValue
WHERE foreignKeyField = someKeyValue AND field1 is null

MS SQL Server で? それは何に依存していますか?

4

2 に答える 2

3

ISNULLオーバーヘッドが少なくなり、NULL条件に依存すると思います。COALESCEとISNULLとISNULLのテスト比較は次のとおりです-http: //blogs.x2line.com/al/archive/2004/03/01/189.aspx

また、パフォーマンスの比較については、このブログをチェックしてください:ISNULL vs. COALESCE http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx

ISNULLは、かなり一貫してCOALESCEを平均10または12パーセント上回っているように見えます。

于 2013-01-23T06:40:18.253 に答える
0

まず、クエリには 2 つの異なる意味があることを述べさせてください。table1 を更新して field1 を常に何かに等しく設定することは、それが NULL であっても、field1 が NULL の場合にのみテーブルを更新することと同じではありません。更新の意図は何ですか?

このフィドルを例にとります:

SELECT Field FROM Test WHERE Field IS NULL;
SELECT COALESCE(Field,'') FROM Test;

最初のクエリは 1 つのレコードを返し、2 番目のクエリは 2 つのレコードを返します。

次のパフォーマンスについて疑問に思うかもしれません。

SELECT COALESCE(Field,'') FROM Test;
SELECT ISNULL(Field,'') FROM Test;

私はテストしていませんが、ISNULL は 20 ~ 30% 効率的であると想定されています。

これが役立つことを願っています。幸運を。

于 2013-01-23T05:52:15.173 に答える