Существуют ли какие-либо логические операторы короткого замыкания (в частности, короткое замыкание AND
и короткое замыкание OR
), которые я могу использовать в предложении WHERE
в MySQL 5.5? Если нет, то каковы альтернативы?Операторы оценки короткого замыкания
Абстрактный взгляд на мою проблему, наряду с объяснением того, почему мне это нужно, можно найти на этой скрипке:
http://sqlfiddle.com/#!2/97fd1/3
На самом деле мы смотрим на миллионы книг в миллионах книжных магазинов тысячи городов в сотнях стран, поэтому мы не можем принять накладные расходы на получение ненужной информации с каждым запросом, который мы отправляем, и серьезно нуждаться в том, чтобы найти способ остановить оценку, как только у нас есть все строки, которые удовлетворяют текущему условию , прежде чем перейти к следующему OR.
Дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо.
В соответствии с просьбой, вот схема, используемая в скрипкой:
CREATE TABLE quantitycache (
id INT AUTO_INCREMENT,
quantity INT,
book_id INT NOT NULL,
bookstore_id INT NULL,
city_id INT NULL,
country_id INT NULL,
PRIMARY KEY (id)
);
Как и некоторые примеры данных:
INSERT INTO quantitycache
(quantity, book_id, bookstore_id, city_id, country_id)
VALUES
(5, 1, 1, NULL, NULL),
(100, 2, 1, NULL, NULL),
(7, 1, 2, NULL, NULL),
(12, 1, NULL, 1, NULL),
(12, 1, NULL, NULL, 1),
(100, 2, NULL, 1, NULL),
(100, 2, NULL, NULL, 1),
(200, 3, NULL, 1, NULL),
(250, 3, NULL, NULL, 1);
Единственный способ, которым вы собираетесь это сделать, это использовать T-SQL, который я думаю. Если вы пишете запрос, который запрашивает ВСЕ магазины, тогда вы будете долго ждать, но с T-SQL вы можете установить переменные и флаги и т. Д., Чтобы вырваться из цикла, который итеративно выполняет меньшую часть запроса (т. Е. Хранилище запросов в хранилище) как только совпадение найдено. –
Готов поспорить, что он прекратит оценивать выражение 'OR', как только один из совпадений, если ни одно из выражений не имеет побочных эффектов. – Barmar
@Barmar: Это не так, к сожалению, как вы можете видеть в скрипке, строки, которые удовлетворяют другим условиям OR, также возвращаются. –