2016-09-05 11 views
0

Предположим, у меня есть две таблицы в РСУБД, которые пытаются моделировать хранение и извлечение одних и тех же данных на основе различных ключевых спецификаций. Table1 хранит весь ключ в одном столбце полукокса, TABLE2 хранит ключ в нескольких столбцах, например, так:Один ключ столбца или несколько столбцов?

Table1: ключ = String, значение = Data

Table2: col1 = Строка, col2 = String, значение = Данные

Таблица 1 содержит ту же информацию, что и комбинация col1 и col2, плюс потенциально ограничители, например. key = "NASDAQ/SUNW", col1 = "NASDAQ", col2 = "SUNW"

Я заинтересован в эффективном извлечении данных. Будет ли использование таблицы 1 более эффективным, чем Table2?

ответ

2

Если ваш ключ содержит несколько значений, вы должны разделить их на отдельные столбцы. Таким образом, вы можете потенциально проиндексировать их отдельно, если возникнет такая необходимость, например. если вам нужно отфильтровать набор результатов по второму значению (в вашем примере представьте, нужно ли вам найти все записи с помощью SUNW).

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

+0

Выполнение запроса с использованием регулярного выражения, например ". * SUNW. *", Было бы намного дороже? – andrewz

+0

Да. Если SUNW находится в отдельном столбце, вы можете индексировать столбец и выполнять поиск по B-дереву (быстрый), чтобы найти все строки с этим значением. Но если он похоронен в столбце с чем-то другим, вам нужно будет выполнить сканирование таблицы (медленно), чтобы найти их. –