Использование временных таблиц в базах данных SQLite

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

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

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

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


person Primal Pappachan    schedule 15.07.2011    source источник


Ответы (2)


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

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

                    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

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

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

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

person Tim    schedule 15.07.2011

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

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

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

person Community    schedule 15.07.2011