У нас есть мобильное приложение на C # с базой данных SQLite.
У нас есть большая база данных инвентаря, такая как 30k или 100k предметов. Файл базы данных занимает 12 МБ на карте флэш-памяти.
Выполнение более простого запроса SELECT с ограничением занимает 10-15 секунд.
select id,invitem,invid,cost from inventory
where itemtype = 1 and
(invitem like '%5204d%' or invid like '%5204d%')
limit 25
иногда категория тоже включена,
select id,invitem,invid,cost from inventory
where itemtype = 1 and
categoryid=147 and
(invitem like '%5204d%' or invid like '%5204d%')
limit 25
Индексы созданы на:
cmd.CommandText = "CREATE INDEX IF NOT EXISTS idx_inventory_categoryid ON " + this.TableName + " (categoryid);";
cmd.ExecuteNonQuery();
cmd.CommandText = "CREATE INDEX IF NOT EXISTS idx_inventory_itemtype ON " + this.TableName + " (itemtype);";
cmd.ExecuteNonQuery();
cmd.CommandText = "CREATE INDEX IF NOT EXISTS idx_inventory_invitem ON " + this.TableName + " (invitem);";
cmd.ExecuteNonQuery();
Эти два поля в Like - это VARCHAR, остальные - числовые.
Можно ли оптимизировать этот запрос выбора на мобильном устройстве?