Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises
.
Здесь it говорит,
Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.
Вы можете найти приятное объяснение здесь .
Пример, найденный в docs , упомянутом ниже.
promiseB = promiseA.then( function onSuccess(result) { return result + 1; } ,function onError(err) { //Handle error } ); // promiseB will be resolved immediately after promiseA is resolved // and its value will be the result of promiseA incremented by 1.
Angular2 and Later
In
Angular2
, посмотрите на следующий пример, но его рекомендовал использоватьObservables
сAngular2
.search(term: string) { return this.http .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`) .map((response) => response.json()) .toPromise();
}
Вы можете использовать это таким образом,
search() { this.searchService.search(this.searchField.value) .then((result) => { this.result = result.artists.items; }) .catch((error) => console.error(error)); }
См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.
Кроме того, здесь представлены обещания spec определите здесь.
Нет, порядок не должен иметь большого значения. При определении того, какие строки соответствуют условию, условие в целом (все вспомогательные условия, объединенные с помощью логической логики) проверяется для каждой строки.
Некоторые интеллектуальные механизмы БД попытаются угадать, какие части условие может быть оценено быстрее (например, вещи, которые не используют встроенные функции), и оценивать их сначала, а более сложные (оцениваемые) элементы получают позже. Это то, что определяется движком БД, но не SQL.
Нет, это не так, требуемые таблицы выбираются, а затем оцениваются по строкам. Порядок может быть произвольным.
Усовершенствованная СУБД должна иметь возможность самостоятельно решать, где в первую очередь необходимо оценить состояние. Некоторые базы данных предоставляют инструменты для отображения «стратегии», как выполняется запрос. В MySQL, например. вы можете ввести EXPLAIN
перед запросом . Затем СУБД печатает действия, выполняемые для выполнения запроса, например, индексирование или полноэкранное сканирование. Таким образом, вы можете сразу увидеть, использует ли он индекс для «компании» в обоих случаях.
Математически Да Это имеет эффект. Не только в SQL Query. а во всех языках программирования всякий раз, когда есть выражение с and
/ or
. Там работает теория полной оценки или частичной оценки. Если его an и запрос и первое выражение and
оцениваются как false, он не будет проверять далее. поскольку ложь с чем-либо дает ложь. Симрильно в выражении или выражении, если первое верно, оно еще не проверяется.
это не должно иметь никакого эффекта, но если вы не уверены, почему бы вам просто не попробовать? порядок where-clauses при выборе из одной таблицы не имеет значения, но если вы присоединитесь к нескольким таблицам, порядок соединений может повлиять на производительность (иногда).
Я не думаю, что порядок предложения where имеет какое-то влияние. Я думаю, что оптимизатор запросов MySQL будет реорганизовываться там, где клаузулы по мере его соответствия, поэтому сначала отфильтровывает самое большое подмножество.
Это еще одна сделка, когда речь идет о объединениях. Оптимизатор также пытается изменить порядок здесь, но не всегда находит лучший способ и иногда не использует индексы. SELECT STRAIGHT JOIN и FORCE INDEX позволяют вам отвечать за запрос.
Вот онлайн-демонстрация, показывающая, что порядок условий предложения WHERE может сделать разницу:
http://rextester.com/HJGN96158
Выполняет следующие запросы:
-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Единственная разница между ними - порядок операндов в OR
.
myslowfunction
намеренно спит в течение секунды и имеет побочный эффект добавления записи в журнал журнала каждый раз, когда он запускается. Вот результаты того, что регистрируется при выполнении указанных выше двух запросов:
myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4
Вышеприведенное показывает, что медленная функция выполняется больше раз, когда она появляется в левой части условия OR
, когда другой операнд не всегда прав (из-за короткого замыкания).
Итак, IMO ответ на вопрос:
Выполняет ли порядок условий в предложении WHERE влияют на производительность MySQL?
blockquote>- «Иногда это может сделать».
Порядок столбцов в предложении where не имеет большого значения, так как MySQL будет оптимизировать запрос перед его выполнением. Но я предлагаю вам прочитать главу Optimization в справочном руководстве MySQL, чтобы получить основную идею о том, как анализировать запросы и таблицы, и при необходимости оптимизировать их. Лично я всегда старался помещать индексированные поля перед неиндексированными полями и упорядочивать их в соответствии с количеством строк, которые они должны возвращать (в большинстве случаев ограничительные условия, наименее ограничительные).