Использование временных таблиц в базах данных SQLite - PullRequest
0 голосов
/ 15 июля 2011

Я просматривал исходный код для Mendeley для Android Мартина Евы и увидел, что временные таблицы создаются вместе с основными таблицами, вызывая replace в таблицах с _id.Например, в таблице Коллекции

db.execSQL(COLLECTIONS_CREATE.replace(" (_id", "_TEMP (_id"));

Я предполагаю, что она создает новую временную таблицу.Любое дальнейшее объяснение этого было бы здорово.Далее данные сначала вставляются во временные таблицы, а затем перемещаются в основные таблицы.

Я искал в SO и наткнулся Каковы варианты использования временных таблиц в системах баз данных SQL? и увидел, что временные таблицы используются для обработки сложных запросов, сортировки и повышения производительности.Кто-нибудь может объяснить, как это помогает в этой ситуации?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Временные таблицы облегчают работу программиста, позволяя программисту разбивать один сложный запрос на несколько относительно простых запросов, а также позволяя программисту временно сохранять результаты, чтобы к ним можно было обращаться несколько раз для различных целей в течение программа без необходимости повторного использования каждый раз. Последнее также облегчает работу компьютера. Дисковая подсистема и процессор могут, так сказать, немного отдохнуть.

Пример первого: допустим, вы хотите получить все записи, где:

                    the sale was in the eastern division
                    and involved one of the several new gizmos introduced last quarter
                    and occurred during the special 5-day bonanza sale

                    or

                    the sale was made by the boss's daughter
                    who floats from division to division
                    and the sale occurred at any time during the month of May

После этого ваша программа сгенерирует электронное письмо с благодарностью продавцу за продажу и отправит копию менеджеру отдела.

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

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

3 голосов
/ 15 июля 2011

Временные таблицы только временные. Они исчезают, как только вы закрываете соединение, по крайней мере, с помощью sqlite. Часто это сложнее, чем с другими DMBS ', хотя обычно это поведение по умолчанию.

Таким образом, временные таблицы, таким образом, используются всякий раз, когда требуется временная таблица! (Просто прикалываюсь'). Производительность будет лучше, поскольку в этом нет ввода-вывода (что часто является причиной проблем с производительностью баз данных).

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

...