2016-05-25 2 views
0

Я пытаюсь понять, будет ли влияние производительности, если я выложу Table1, как в Table2? Что лучше для производительности?SQL Performance с укладкой

Запрос # 1:

SELECT * 
FROM TABLE1 
WHERE ID = 100 

Выход:

ID col1 col2 
------------- 
100 1 0 
200 0 1 
300 1 0 
400 0 1 

Запрос # 2:

SELECT * 
FROM TABLE2 
WHERE ID = 100 

Выход:

ID col data 
---------------- 
100 col1 1 
100 col2 0 
200 col1 0 
200 col2 1 
300 col1 1 
300 col2 0 
400 col1 0 
400 col2 1 

Также как SQL Server просматривает записи?

Благодаря

+0

Что вы делаете, это вызов [** UNPIVOT **] (https://technet.microsoft.com/en-us/library/ms177410 (v = sql.105) .aspx? F = 255 & mspperror = -2147217396). У каждого есть возможность использования. Таблица 2 будет больше, но с соответствующим индексом будет иметь схожую производительность. –

+0

Если вы только что установили 2 условия (данные 1 или 2), вам не нужно делать UNPIVIOT, потому что вы можете просто присоединиться к ID и данным. –

+0

Это немного странно, что любой другой части вашей системы не волнует, будет ли в наборе результатов несколько строк или несколько столбцов. –

ответ

1

Таблица 1 нормализуется, а в таблице 2 выполнена в виде EAV который рассматривается как анти-паттерн, и с хорошими причинами.

И хотя я считаю, что производительность будет лучше с Таблицей 1,
Здесь есть и другие факторы, которые следует учитывать здесь, помимо производительности.

IMHO, единственная веская причина выбрать дизайн EAV, когда у вас нет другого выбора. (и это редко бывает, так как большинство баз данных сегодня могут обрабатывать сложные типы данных, такие как XML или JSON). В этом случае выбор совершенно очевиден - в таблице 1 есть лучший дизайн, без вопросов.