2015-08-21 4 views
0

Я использую SQL Server 2012 &, создавая таблицу с 8 столбцами, которые показаны ниже. Я пытаюсь оценить, какие столбцы я должен использовать в качестве индексов, и должны ли они быть кластерными или некластеризованными индексами.Выбор столбцов для индексирования и их кластеризация или не кластеризация

Один раз в день (обычно) будет загружена около 10 000 строк данных. Идя вперед, это может быть 100 000.

type    column name 
------------- ------------ 
datetime   UploadDate 
varchar(12)  SecID 
varchar(6)  FundCode 
varchar(100)  Name 
float   Price 
float   Nominal 
int    SourceCode 
datetime   PriceDate 

Пример некоторых строки

UploadDate SecID FundCode Name Price Nominal SourceCode PriceDate 
2015-08-20 A045  ABCVPL  Joe 1.3434 1000.33 3 
2015-08-20 A563  ABCVPL  Bob 1.5961 10.33  3 
2015-08-20 A045  DEFGHJ  Joe 1.3434 856.41 3 
2015-08-20 XC45  PLMNOI  Pip 2.3654 25.52  3 
2015-08-20 KMM5  ABCVPL  Nit 6.9565 1532  3 
2015-08-21 A045  ABCVPL  Joe 4.3434 1112  3 
2015-08-21 GH45  DEFGHJ  Joe 3.3434 16532  3 
2015-08-21 PL34  DEFGHJ  Joe 7.3434 635  3 
2015-08-21 ER33  ABCVPL  Joe 8.3434 6320  3 

Ночной процесс будет вставлять новые строки в базу данных, так что время, потраченное здесь не является проблема.

Это будет только запрос, который будет выполняться на столе &. Первичного ключа не будет.

Если мы возьмем 1 день в качестве примера данных. Допустим, что сегодня загружено 10 000 строк. Столбец UploadDate будет 21 августа 2015 года для всех 10 000 строк. Столбец FundCode может принимать 20 различных значений. Все остальные столбцы (кроме SourceCode - хотя и не думают, что это будет вызвано много) будут иметь разные значения и в значительной степени принимают бесконечные значения.

Итак, я считаю, что FundCode & UploadDate будет состоять из двух столбцов, которые могли бы быть кандидатами на индексацию, что кажется правильным? Если это так, они должны быть кластеризованными или некластеризованными и почему?

Update

Просто добавить, что, используя первые три столбца в качестве индекса может создать уникальную строку - не уверен, если это помогает или что-нибудь

+0

Kimberly Tripp [показать совершенно ясно, что такое ** липкая d ** кластерный ключ] (http://www.sqlskills.com/blogs/kimberly/guids-as-primary-keys-andor-the-clustering-key/) - следуйте ее совету! Она - Королева Индексации *! –

+2

Уже есть статьи с общим советом о том, как индексировать в Интернете и давать конкретные рекомендации, нам нужно будет знать, какие запросы будут запущены, и как их следует взвешивать. –

+1

Также: * не будет первичного ключа * - это ужасно плохая идея ** - каждая таблица ** должна иметь ** правильный первичный ключ, позволяющий четко и надежно идентифицировать каждую строку самостоятельно.Как правило, этот первичный ключ также является ** кластерным индексом ** в SQL Server –

ответ

0
  1. При создании первичного ключа любой колонке или комбинации столбцов, она создает кластеризованный индекс

  2. У вас не может быть более одного кластерного индекса на таблице

  3. Остальной колонн, на которых вы будете делать поиск большую часть времени, создать некластеризованный индекс на них

    • Создать первичный ключ на первых трех столбцах первой

    • Создать не- кластерный индекс на тех столбцах, которые вы будете использовать в основном в критерии поиска

+0

Вы не можете иметь более одного кластерного индекса ** в таблице * * –

+0

Sql-сервер создает кластерный индекс для первичного ключа, если в таблице еще нет кластерного индекса. –

+0

, поэтому лучшим способом было бы создать первичный ключ в UploadDate, FundCode & SecID. По умолчанию это будет кластеризованный индекс. Использует эти 3 столбца для моего основного ключа. Я продолжаю читать первичный ключ, должен быть как можно более узким? – mHelpMe

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