2010-11-23 5 views
2

Мне нужно создать индекс am в SQL, однако он должен отображать записи, введя только часть имени. Индекс должен быть создан, чтобы получить информацию студента, используя часть имени студента (т.е. если имя, если Johnanesburg, пользователь может ввести John)Использование INDEX в SQL Server

Я использовал синтаксис ниже, но это не будет работать

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

Я думаю, что вы, возможно, неправильно поняли цель индексов: http://en.wikipedia.org/wiki/Index_%28database%29 – RLT 2010-11-23 11:17:15

ответ

3

Я думаю, что ваша проблема здесь: A%

Попробуйте обернуть его в апострофы.

SELECT * 
    FROM Student 
WHERE StRegNo LIKE 'A%' 

Кроме того, вы можете захотеть GO заявление после создания индекса.

+2

Используйте «GO» только в SQL Server Mgmt Studio - это не ** ** ключевое слово SQL-языка - это разделитель команд SSMS – 2010-11-23 11:35:34

0

Индекс, который вы создаете над SName, не будет предоставлять столько преимуществ для оператора select, который вы используете, как созданного над StRegNo. Предполагая, что StRegNo является первичным ключом на Student таблице вы можете попробовать:

CREATE CLUSTERED INDEX IX_Student on Student(StRegNo) 

SELECT * 
FROM Student 
WHERE StRegNo LIKE 'A%' 

Однако представляется, что SQL вы предоставили расходится с вашим вопросом. Если вы хотите выполнить поиск по имени студента, вам может понадобиться следующее.

CREATE NONCLUSTERED INDEX IX_Student on Student(SName) 

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

Ardman получил это право относительно вашего запроса% A => '% A'. Теперь, что касается индекса, это еще одна история, в которой ни один индекс не может помочь вам в то время, и не может полностью искать текст. Если вы хотите искать имена, начинающиеся с @A (т. Е. John%), упорядоченный индекс может помочь, но в противном случае (т. Е.% Bur%), вы пойдете на полное сканирование таблицы!