Для вашей проблемы со словарями легче работать, чем со списками кортежей. В этом случае вы можете комбинировать сопоставления с помощью словарного понимания.
from operator import itemgetter
# create dictionary with all keys set to 0
allkeys = dict.fromkeys(map(itemgetter(0), list1), 0)
# for each year, combine dictionary mappings
dict1 = {k: {**allkeys, **dict(v)} for k, v in dict1.items()}
Вы можете, если хотите, преобразовать обратно в списки кортежей:
res = {k: list(v.items()) for k, v in dict1.items()}
Результат для опции вложенного словаря:
{2011: {'Debt collection': 5572,
'Mortgage': 4483,
'Credit reporting': 0,
'Checking or savings account': 0,
'Student loan': 431,
'Credit card or prepaid card': 0,
'Bank account or service': 0,
'Credit card': 0,
'Consumer Loan': 0},
2012: {'Debt collection': 0,
'Mortgage': 0,
'Credit reporting': 0,
'Checking or savings account': 0,
'Student loan': 1632,
'Credit card or prepaid card': 0,
'Bank account or service': 0,
'Credit card': 0,
'Consumer Loan': 480,
'Medical loan': 1632,
'Prepaid card': 83}}
Это - деликатный вопрос, если довольно широко (и ничем не хуже для этого).
Если я понимаю Вас, то Вы спрашиваете, как приняться за решение проблемы оптимизации, запускающейся с нуля.
Первый вопрос спросить: "есть ли проблема производительности?"
Если нет никакой проблемы, то Вы сделаны. Это часто имеет место.Мило.
С другой стороны...
Вход получит Вас Ваши частые запросы.
Если Вы используете некоторый уровень доступа к данным, то могло бы быть просто добавить код для входа всех запросов.
Это - также хорошая идея зарегистрироваться, когда запрос выполнялся и сколько времени каждый запрос берет. Это может дать Вам общее представление о том, где проблемы.
Кроме того, спросите пользователей, какие биты раздражают их. Если медленный ответ не раздражает пользователя, то он не имеет значения.
(Я могу неправильно понимать эту часть вопроса), Вы ищете любые шаблоны в запросах / время отклика.
Они обычно будут запросами по большим таблицам или запросами, которые присоединяются ко многим таблицам в едином запросе...., но если Вы времена показаний, Вы можете вестись теми.
Вы конкретно спрашиваете об оптимизации таблиц.
Вот некоторые вещи, которые можно искать:
Вам могло бы также понравиться мое сообщение на этом.
На это трудно ответить, не зная, о какой системе Вы говорите.
В Oracle, например, Руководитель предприятия позволяет Вам видеть, какие запросы подняли большую часть времени, позволяют Вам сравнить различные профили выполнения и позволяют Вам проанализировать запросы по блоку времени так, чтобы Вы не добавляли индекс, это собирается помочь одному запросу за счет любого, который Вы выполняете.
Ваш вопрос немного неопределенен. Какая платформа DB?
Если мы говорим о SQL Server:
Остальное на основе того, какие данные Вы имеете и как это - установка.
В SQL-сервере можно использовать трассировку, чтобы узнать, как запрос работает. Используйте ctrl + k или l
Например, если Вы видите, что полное сканирование таблицы происходит в таблице с большим количеством записей затем, это, вероятно, не хороший запрос.
Более конкретный вопрос определенно выберет Вас лучшие ответы.
Если Ваша таблица преимущественно читается, поместите кластерный индекс в таблицу.
Мой опыт с главным образом DB2 и поверхностным знанием Oracle в первые годы.
Если Ваш DBMS будет хорошо работать, то он будет иметь способность собрать статистику на определенных запросах и объяснить план, который он использовал для извлечения данных.
Например, если Вы имеете таблицу (x) с двумя столбцами (дата и diskusage) и только имеете индекс в дату, запрос:
select diskusage from x where date = '2008-01-01'
будет очень эффективно, так как это может использовать индекс. С другой стороны, запрос
select date from x where diskusage > 90
не было бы так эффективно. В бывшем случае, "объясняют, план" сказал бы Вам, что мог использовать индекс. В последнем это сказало бы, что должно было сделать сканирование таблицы для получения строк (это в основном смотрит на каждую строку, чтобы видеть, соответствует ли это).
Действительно интеллектуальный DBMS может также объяснить, что необходимо сделать для улучшения производительности (добавьте индекс на diskusage в этом случае).
Относительно того, как видеть, какие запросы выполняются, можно или собрать это из DBMS (если он позволяет его), или вынудите всех сделать их запросы через хранимые процедуры так, чтобы управление DBA, что запросы - это - их задание, поддерживая DB в рабочем состоянии эффективно.
1. Каковы шаблоны, которые Вы используете для определения частых запросов?
Зависит, на каком уровне Вы имеете дело с базой данных. Если Вы - DBA, или имеют доступ к инструментам, дб как Oracle позволяют Вам выполнять задания и генерировать статистику/отчеты за установленный промежуток времени. Если Вы - разработчик, пишущий приложение против дб, можно просто сделать профилирование производительности в рамках приложения.
2. Как Вы выбираете факторы оптимизации?
Я пытаюсь получить общее ощущение того, как таблица используется и данные, которые она содержит. Я иду о со следующими вопросами.
Будет им, обновил тонну и на том, какие поля обновления происходят? Это имеет столбцы с низкой кардинальностью?
Действительно ли это стоит индексировать? (таблицы, которые являются очень маленькими, могут быть замедлены, если получено доступ индексом),
Сколько обслуживания/головной боли стоит, чтобы иметь его, работает быстрее?
Отношение обновляет/вставляет по сравнению с запросами?
и т.д.
3. Каковы типы изменений, которые можно внести?
- При использовании Oracle усовершенствуйте статистику!=)
- Normalization/De-Normalization любой может улучшить производительность в зависимости от использования таблицы. Я почти всегда нормализую и затем только если я не могу никаким другим практическим способом делать запрос, быстрее денормализует. Хороший способ денормализовать для запросов и когда Ваша ситуация позволяет его, состоит в том, чтобы сохранить реальные таблицы нормализованными и составить денормализованную "таблицу" с осуществленным представлением.
- Индексируйте рассудительно. Слишком многие могут быть плохими на многих уровнях. Индексы BitMap являются большими в Oracle, пока Вы не обновляете столбец часто, и тот столбец имеет низкую кардинальность.
- Используя Индекс организовал таблицы.
- Разделенные и подразделенные таблицы и индексы
- Используйте хранимые процедуры, чтобы уменьшить распространения в прямом и обратном направлениях приложениями, безопасностью увеличения, и включить оптимизацию запросов, не влияя на пользователей.
- Таблицы контакта в памяти, если соответствующий (получил доступ ко много и довольно маленький),
- Разделение устройства между индексом и файлами базы данных таблицы.
..... список продолжается.=)
Надежда это полезно для Вас.
индексы на PKs и FKs и одной вещи, которая всегда помогает РАЗДЕЛЕНИЮ...