Каков самый быстрый способ проверить, существует ли запись, когда я знаю первичный ключ? select
, count
, filter
, where
или что-то еще?Самый быстрый способ проверки наличия записи
ответ
Вы можете проверить себя через EXPLAIN QUERY PLAN, который расскажет вам о стоимости &, которую он намерен выполнить для конкретного запроса.
Затраты не сравниваются напрямую между прогонами, но вы должны получить достойное представление о наличии каких-либо существенных отличий.
Это, как ожидается, будет COUNT(id) FROM table WHERE table.id="KEY"
, вероятно, идеальным, так как он воспользуется любой частичной способностью поиска (особенно быстро в columnar databases, например, красным смещением amazon) и индексированием первичного ключа.
Когда вы используете count
, база данных должна продолжить поиск, даже если она обнаружила запись, потому что может существовать вторая. Итак, вы должны найти фактическую запись и сообщить базе данных, чтобы она остановилась после первого.
Когда вы запрашиваете возврат данных из записи, база данных должна считывать данные из таблицы. Но если запись можно найти, просмотрев идентификатор в индексе, доступ к этой таблице будет лишним. Таким образом, вы не должны возвращать ничего, кроме ID, который вы используете для поиска:
SELECT id FROM MyTable WHERE id = ? LIMIT 1;
Во всяком случае, не читает фактические данные и ограничения подразумеваются при использовании EXISTS, который проще в PeeWee:
SELECT EXISTS (SELECT * FROM MyTable WHERE id = ?);
MyTable.select().where(MyTable.id == x).exists()
'COUNT (ID) из таблицы, где table.id =«КЛЮЧ»', вероятно, является идеальным, поскольку он воспользуется любой частичной способностью поиска (особенно быстро в столбчатых базах данных, как красное смещение Амазонка) и индексация первичного ключа. – TemporalWolf
Самый быстрый способ - использовать count среди указанных опций. Чтобы быть более сырыми, используйте sqlite3_column_count() непосредственно из источников sqlite, поддерживая пользовательский хеш-список. – Jerry