Хотя документация не подразумевает этого, очевидно, первичный разработчик sqlite ( Ричард Хипп ) подтвердил в списке рассылки , что EXISTS
короткое замыкание для вас.
Планировщик запросов в SQLite, хотя и не блестящий, но достаточно умен, чтобы знать, что он может остановиться и вернуть true, как только увидит первую строку запроса внутри EXISTS ().
Таким образом, предложенный вами запрос будет наиболее эффективным:
SELECT EXISTS(SELECT 1 FROM myTbl WHERE u_tag="tag");
Если вы беспокоитесь о переносимости, вы можете добавить ограничение.Я подозреваю, что большинство БД предложат вам такое же короткое замыкание.
SELECT EXISTS(SELECT 1 FROM myTbl WHERE u_tag="tag" LIMIT 1);
Выбор 1 является принятой практикой, если вам что-то не нужно из записи, хотя то, что вы выбираете, не должно иметь никакого значения в любом случае.
Поместите индекс в поле вашего тега.Если вы этого не сделаете, запрос несуществующего тега выполнит полное сканирование таблицы.
EXISTS
указывает, что он вернет 1 или 0, а не ноль.