2010-11-23 8 views
2

SQLでamインデックスを作成する必要がありますが、名前の一部のみを入力してレコードを表示する必要があります。インデックスは、生徒の名前の一部を使用して生徒の情報を取得するために作成する必要があります(つまり、もし名前の場合Johnanesburg、ユーザが入力ジョン)SQL ServerでINDEXを使用する

私は、以下の構文を使用しますが、それは文句を言わない

create index Student ON Student(SName) 
SELECT * FROM Student WHERE StRegNo LIKE A% 
go 
+2

インデックスの目的を誤解している可能性があります:http://en.wikipedia.org/wiki/Index_%28database%29 – RLT

答えて

3

を働きますあなたの問題はここにあると思います。%

アポストロフィでラッピングしてみてください。あなたは、インデックスを作成した後

SELECT * 
    FROM Student 
WHERE StRegNo LIKE 'A%' 

また、あなたはGO声明をすることもできます。

+2

"GO"はSQL Server Mgmt Studioでのみ使用してください** ** SQL言語キーワード - SSMSコマンドセパレータ –

0

SNameを超えて作成しているインデックスは、実行中のSELECTステートメントにはStRegNoを超えて作成されたものとして多くの利点を提供しません。あなたが提供しているSQLがあなたの質問と対立しているように見えるしかし

CREATE CLUSTERED INDEX IX_Student on Student(StRegNo) 

SELECT * 
FROM Student 
WHERE StRegNo LIKE 'A%' 

StRegNoはあなたが試みることができるStudentテーブルの主キーであると仮定すると。生徒の名前に基づいて検索する場合は、代わりに次のようにします。

CREATE NONCLUSTERED INDEX IX_Student on Student(SName) 

SELECT * 
FROM Student 
WHERE SName LIKE 'A%' 
0

Ardmanがあなたの質問%A => '%A'に関して正しいと思っています。索引については、その時点で索引が役に立たないという別の話ですが、全文検索もできません。 @A(つまりJohn%)で始まる名前を検索する場合は、順序付けされたインデックスが役立つ可能性があります(つまり%bur%)。完全なテーブルスキャンになります。

関連する問題