Какой самый быстрый метод для выполнения более 64 объединений таблиц в SQlite? - PullRequest
2 голосов
/ 05 мая 2011

Я планирую сгенерировать запросы для SQLite, которые будут включать много объединений для 12 таблиц, которые превысят ограничение на 64 таблицы в SQLite. (~ 250 присоединений к столу или, возможно, больше) Это будет работать на Android в конце концов. Цель этого состоит в том, чтобы в результирующем наборе было количество X пользовательских полей в зависимости от создаваемого отчета.

К сожалению, я не администратор базы данных и не знаю оптимального способа добиться этого.

Пока я думаю, что варианты:

  • Используйте 2 временные таблицы, чтобы совмещать результирующий набор при объединении максимально возможного количества. (Мое предыдущее решение в SQLServer, довольно медленное)
  • Создание результирующих наборов из нескольких столбцов и ключа для объединения и сохранение их в n временных таблицах. (Где n меньше 64) Затем соедините все временные таблицы по их общему ключу.
  • Создайте одну временную таблицу и заполните ее одной вставкой или обновляйте одновременно.
  • Не делайте большого объединения, вместо этого выполняйте много отборов и заполняйте некоторый контейнер данных.

Есть что-то еще, что я должен рассмотреть?

Ответы [ 3 ]

3 голосов
/ 16 мая 2011

Согласно вашему комментарию к ответу Майка, «запрос на создание отчета должен присоединяться и присоединяться много раз».

Часто при работе с отчетами вам нужно разделить запрос на кусочек.-размерные чанки и хранение промежуточных результатов во временных таблицах, где это применимо.

Кроме того, ваш вопрос звучит так, как будто вы хранилище сущностей / атрибутов / значений и пытаетесь все это изменить.Если это так, вы, возможно, захотите вернуться, используя этот анти-шаблон дизайна, поскольку он, вероятно, является источником вашей проблемы.

3 голосов
/ 05 мая 2011

Я не думаю, что вы можете добиться «быстроты» на любой платформе реляционных баз данных, когда вы пытаетесь объединить такое количество таблиц - любая встроенная оптимизация собирается избавиться от призрака. Скорее всего, я пересмотрю свой дизайн, когда увижу до десяти таблиц в запросе.

Я думаю, что ваш дизайн схемы необходимо пересмотреть. 250+ таблиц в схеме (на телефоне!) Для меня не имеет смысла - я запускаю несколько корпоративных приложений в одной БД с 200 + ГБ данных, и все еще есть только 84 таблицы. И я никогда не присоединяюсь ко всем из них. У всех ваших таблиц разные столбцы? Действительно разные? Не могли бы вы опубликовать несколько записей от sqlite_master?

2 голосов
/ 11 мая 2011

Поскольку ваше приложение работает на устройстве Android, я думаю, оно синхронизируется с базой данных корпоративного класса где-то на сервере.Реальное решение состоит в том, чтобы создать ненормализованное представление данных сервера в базе данных устройства, чтобы к ним можно было более легко получить доступ.

...