SQLite: производительность строк и столбцов VS - PullRequest
1 голос
/ 08 октября 2011

У меня есть таблица базы данных, где в каждой строке (фильме) есть пара числовых тегов (категории фильмов).В настоящее время я помещаю все эти теги в тот же столбец, что и строка, и ищу их, используя% LIKE%, что требует медленного полного сканирования таблицы, когда мне нужно найти все фильмы в определенной категории.

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

Однако для этого потребуется гораздо больше вставок в базу данных.Строка имеет в среднем 10 тегов, поэтому вместо вставки одной строки мне нужно вставить 11 строк.Поскольку мое приложение выполняет намного больше операций вставки, чем фактически запрашивает, производительность вставки имеет решающее значение.

Есть ли другой способ решить эту проблему, не жертвуя производительностью вставки?Или нет большой разницы между вставкой 1 строки с 10 столбцами против 10 строк с 2 столбцами?

1 Ответ

1 голос
/ 08 октября 2011

У вас будет чуть медленнее производительность вставки, потому что индексы должны быть обновлены (по крайней мере, он будет иметь индекс по ROWID, и вам понадобится индекс по ID категории, чтобы получить значительное ускорение). Размер данных сам по себе тривиален.

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

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

...