2010-11-11 4 views

ответ

4

Это лучше, если вы сообщите нам, что RDBMS вы используете, но ...

1 - Не делайте SELECT *. Укажите, какие столбцы вам нужны. Меньше данных = быстрее запрос

2 - Для индексирования убедитесь, что у вас есть индекс на CNIC. Вам также нужен хороший кластеризованный индекс для первичного ключа (желательно что-то вроде идентификационного номера)

3 - Вы помещаете число в одинарные кавычки ' ', что указывает на то, что у вас может быть это как столбчик varchar. Если он всегда будет ЧИСЛЕННЫМ, он должен быть типом данных int/bigint. Это занимает меньше места и будет быстрее извлекать и индексировать.

+0

hmmm, goood. +1 для 'Меньше данных = более быстрый запрос' :) –

+1

для расширения на # 1, если OP может удалить« * »с небольшим списком столбцов (и в зависимости от базы данных, не все это поддерживает), вы можете создать index и INCLUDE, которые используются в запросе. это называется индексом покрытия и может ускорить использование некластеризованного индекса. –

+0

@KM - Хорошее предложение. – JNK

2

Создание индекса на CNIC:

CREATE INDEX ix_employee_cnic ON employee (cnic) 
1

Первое, как я вижу этот столбец будет использоваться для хранения н.у.к. карты Id, то вы можете сделать ваш coulmn типа int, а не varchar или nvarchar как поиск будет происходить быстрее целочисленного типа по сравнению с varchar или nvarchar.

Во-вторых, использовать with (no lock), как

select * from Employee with (nolock) where CNIC = 'some-CNIC-number' 

Это позволяет свести к минимуму шансы в тупик.

Смежные вопросы