私は現在、10 年以上前に作成された古い Delphi アプリケーションに取り組んでいます。アプリケーションの一部には、アプリケーションで更新ステートメントを構築し、SQL Server に送信して実行するコンポーネントが含まれています。
私がしなければならなかった作業は、いくつかのクエリを高速化することでした。これを行うために、次のような 2 つのインデックスを追加しました。
CREATE NONCLUSTERED INDEX [ix_ClientFilerTo0]
ON [ClientTable] ([Client])
INCLUDE ([ClientCol1],[ClientCol2],[ClientCol3] ... Many more columns)
WHERE Client = 0
CREATE NONCLUSTERED INDEX [IX_Client_Status]
ON [OrderTable] ([Client],[Status])
INCLUDE ([OrderCol1],[OrderCol2],[OrderCol3],[OrderCol4])
WHERE [Status] <= 7
GO
私がそれをしたとき、私は次のエラーを得ました:
これらの設定を index create ステートメントに追加しようとしましたが、役に立ちませんでした。
SQL プロファイルを実行したところ、アプリケーションの接続が次の設定でリストされていました。
set quoted_identifier off
set arithabort off
set numeric_roundabort off
set ansi_warnings off
set ansi_padding off
set ansi_nulls off
set concat_null_yields_null off
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
これらの設定は、このアプリが使用する BDE の非常に古いバージョンから来ていると思います。それらを変更するのは大変な作業です (そして、このアプリの書き直しに力を入れようとしています)。
これらの設定を持つ接続で動作するようにインデックスを作成する方法はありますか?
ノート:
- SQL Server 2012 を使用しています。
- このエラーは、本番環境と非本番環境の両方の SQL Server で発生します
- このエラーは多くのユーザーのマシンで発生します
現在 Orders テーブルにあるインデックスの例を次に示します。
USE [UseMyDb]
GO
/****** Object: Index [IX_AnotherIndex] Script Date: 10/3/2013 2:56:49 PM ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_AnotherIndex] ON [OrderTable]
(
[Sequence] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SomethingIDontUnderstand]
GO