Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > SQLite TRIGGER


Автор: Track 9.7.2012, 01:23
Помогите оптимизировать trigger.

Работаю с использованием SQLite

Код

// Создаю таблицы
@"PRAGMA encoding = 'UTF-8';CREATE TABLE IF NOT EXISTS 'folders'(
                    'id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                    'folder' TEXT);
                    CREATE TABLE IF NOT EXISTS 'files'(
                    'folder_id' INT,
                    'filename' CHAR(255),
                    'size' INTEGER
                     )";

// Создаю trigger
"CREATE TRIGGER delete_files BEFORE DELETE ON folders FOR EACH ROW
BEGIN
      DELETE FROM files WHERE folder_id=OLD.id;
END"


Работает очень медленно - удаление нескольких сотен записей из таблицы folders занимает минут пять.
При удалении "вручную" все происходит гораздо быстрее:

Код

// Получаю id строк для удаления
"SELECT id FROM folders WHERE folder LIKE '%" + dir_lower + "%'"
//Удаляю из таблицы folders 
"DELETE FROM folders WHERE folder LIKE '%" + dir_lower + "%'"
//Удаляю связанные элементы из таблицы files
"DELETE FROM files WHERE files.folder_id in(0,1,.....)"


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)