Это не вопрос использования другого инструмента.Это не вопрос использования другой структуры данных.Это вопрос о ПОЧЕМУ Я вижу то, что вижу - пожалуйста, прочитайте до конца, прежде чем ответить.Спасибо.
ИСТОРИЯ
У меня есть одна таблица с одним условием, записи не удаляются.Вместо этого запись помечается как не активная (для этого есть поле), и в этом случае все поля (кроме идентификаторов и этого поля isActive) считаются неактуальными.
Еще об идентификаторах - есть два поля:
- id - int, первичный ключ, кластеризованный
- name - уникальный, varchar, внешний индекс
Как выполняется обновление, например (Я использую C # / Linq / MSSQL2005): я выбираю запись на основе имени, затем изменяю обязательные поля и фиксирую изменения, чтобы выполнить обновление (UPDATE использует идентификатор, а не имя).
Однако существуетпроблема с хранением.Так почему бы не разбить эту таблицу на двойную структуру - таблицу заголовков (id, name, isActive) и таблицу данных (id, остальные поля).В случае проблем с хранилищем мы можем реально удалить все записи из таблицы данных (для isActive = false).
edit (от Shimmy): заголовок + данные не извлекаются LINQ при соединении.Записи данных загружаются по требованию (и это всегда происходит из-за кода).
комментарий (по постеру): AFAIR соединение отсутствует, поэтому это не имеет значения.Данные для заголовков были загружены вручную.См. Ниже.
Производительность - (моя) теория
Теперь, как насчет производительности?Какой из них будет быстрее?Допустим, у вас есть 10000 записей в обеих таблицах (одна, заголовок, данные), и вы обновляете их одну за другой (все 3 таблицы) - поля isActive и некоторое поле из полей «data».
Мой расчетwas / is:
моно таблица - поиск с использованием внешнего индекса, затем переход в структуру, выборка всех данных, обновление с использованием первичного ключа.
двойные таблицы - поиск с использованием внешнего индекса, переход в таблицу заголовков, выборка всех данных, поиск по первичному ключу в таблице данных (здесь нет переходов, это кластерный индекс), выборка всех данных, обновление обеих таблиц с использованиемпервичные ключи.
Итак, для меня моноструктура должна быть быстрее, потому что в двойном случае у меня те же операции плюс некоторые дополнительные функции.
Результаты
Что бы я ни делал, обновлял, выбирал, вставлял, двойная структура либо немного лучше (скорость), либо на 30% быстрее.И теперь я все озадачен - я бы понял, что если бы я вставлял / обновлял / выбирал только записи заголовка, но в каждом случае записи данных также используются.
Вопрос - почему / как двойная структураможет быть быстрее?