Дизайн, который кратко моделирует вашу проблему, всегда является хорошим началом. Переопределение модели данных может привести к проблемам с производительностью. Например, я слышал отчеты о проектах, стремящихся к гибкости, которые используют RDBMS в качестве немого хранилища «имя/значение», и итоговая производительность была ужасающей.
Как только хороший дизайн на месте, затем используйте инструменты, предоставляемые СУРБД, чтобы помочь ему достичь хорошей производительности. Однополевые PK (без композитов), но составные бизнес-ключи как индекс с уникальным ограничением, использование соответствующих типов данных, например. используя соответствующие числовые типы для числовых значений, а не символов или аналогичных.Физические атрибуты аппаратного обеспечения, на которых работает RDBMS, также должны учитываться, поскольку основная часть времени запроса часто является дисковым вводом-выводом - но, конечно же, не считайте это само собой разумеющимся - используйте профилировщик, чтобы узнать, куда идет время ,
В зависимости от соотношения обновления/запроса материализованные представления/индексированные представления могут быть полезны для повышения производительности для медленных запросов. Альтернативой бедного человека является использование триггеров для вызова процедуры, которая заполняет таблицу в результате медленного, редко-измененного представления.
Оптимизация запросов - это немного черное искусство, поскольку оно часто зависит от базы данных, но здесь приведены некоторые эмпирические правила - Optimizing SQL.
Наконец, хотя вы, возможно, вне предполагаемого объема вашего вопроса, используйте хороший уровень доступа к данным в своем приложении и избегайте соблазна катиться самостоятельно - для всех основных языков есть проверенные и реалистичные реализации. Использование кеширования на уровне доступа к данным, среднему уровню и прикладному уровню может значительно повысить производительность.
Сообщество Wiki? –
очень хороший вопрос. –
Хотелось бы получить больше ответов. – Zombies