В целом гораздо сложнее исправить плохой дизайн базы данных, который вызывает проблемы с производительностью после запуска, потому что вам приходится иметь дело с существующими записями. Хуже того, плохой дизайн может проявиться не раньше, чем через несколько месяцев после запуска, когда будет много записей вместо нескольких. Вот почему базы данных должны проектироваться с учетом производительности (нет, это не преждевременная оптимизация, существуют известные методы, которые обычно работают лучше, чем другие методы, и их следует учитывать при проектировании), а базы данных следует тестировать на соответствие тестовому набору записей, которые близок к ожидаемому уровню записей, который вы бы хотели получить через пару лет, или превышает его.
Относительно того, сколько времени потребуется, чтобы полностью исправить плохо спроектированную базу данных, месяцы или годы. Часто худшая часть - это то, что занимает центральное место в дизайне (например, таблица EAV) и требует почти каждого запроса / sp / view. UDF должен быть скорректирован, чтобы перейти к лучшей структуре. Затем вы должны убедиться, что все записи перемещены в новую лучшую структуру. Чем раньше вы сможете исправить такую ошибку, тем лучше. Гораздо лучше перенести пару тысяч записей в новую структуру, чем 100 000 000.
Если с вашей структурой все в порядке, но ваши запросы плохие, вам лучше, так как вы можете взять десятку худших показателей (выберите не только по общему времени выполнения, но и по времени X, а не по времени выполнения) и исправить, промыть и повторить.
Если вы пытаетесь исправить плохую базу данных, эта книга может пригодиться:
http://www.amazon.com/Refactoring-Databases-Evolutionary-Database-Design/dp/0321293533/ref=sr_1_1?ie=UTF8&s=books&qid=1268158669&sr=8-1