MySQL, где при индексированном столбце и индексированном поведении [дубликат]

Angular1

Для людей, которые используют 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 определите здесь.

34
задан fracz 14 April 2015 в 11:21
поделиться

8 ответов

Нет, порядок не должен иметь большого значения. При определении того, какие строки соответствуют условию, условие в целом (все вспомогательные условия, объединенные с помощью логической логики) проверяется для каждой строки.

Некоторые интеллектуальные механизмы БД попытаются угадать, какие части условие может быть оценено быстрее (например, вещи, которые не используют встроенные функции), и оценивать их сначала, а более сложные (оцениваемые) элементы получают позже. Это то, что определяется движком БД, но не SQL.

13
ответ дан Amber 25 August 2018 в 22:32
поделиться

Нет, это не так, требуемые таблицы выбираются, а затем оцениваются по строкам. Порядок может быть произвольным.

1
ответ дан Aaron Harun 25 August 2018 в 22:32
поделиться

Усовершенствованная СУБД должна иметь возможность самостоятельно решать, где в первую очередь необходимо оценить состояние. Некоторые базы данных предоставляют инструменты для отображения «стратегии», как выполняется запрос. В MySQL, например. вы можете ввести EXPLAIN перед запросом . Затем СУБД печатает действия, выполняемые для выполнения запроса, например, индексирование или полноэкранное сканирование. Таким образом, вы можете сразу увидеть, использует ли он индекс для «компании» в обоих случаях.

4
ответ дан chiccodoro 25 August 2018 в 22:32
поделиться

Математически Да Это имеет эффект. Не только в SQL Query. а во всех языках программирования всякий раз, когда есть выражение с and / or. Там работает теория полной оценки или частичной оценки. Если его an и запрос и первое выражение and оцениваются как false, он не будет проверять далее. поскольку ложь с чем-либо дает ложь. Симрильно в выражении или выражении, если первое верно, оно еще не проверяется.

3
ответ дан Neel Basu 25 August 2018 в 22:32
поделиться

это не должно иметь никакого эффекта, но если вы не уверены, почему бы вам просто не попробовать? порядок where-clauses при выборе из одной таблицы не имеет значения, но если вы присоединитесь к нескольким таблицам, порядок соединений может повлиять на производительность (иногда).

3
ответ дан oezi 25 August 2018 в 22:32
поделиться

Я не думаю, что порядок предложения where имеет какое-то влияние. Я думаю, что оптимизатор запросов MySQL будет реорганизовываться там, где клаузулы по мере его соответствия, поэтому сначала отфильтровывает самое большое подмножество.

Это еще одна сделка, когда речь идет о объединениях. Оптимизатор также пытается изменить порядок здесь, но не всегда находит лучший способ и иногда не использует индексы. SELECT STRAIGHT JOIN и FORCE INDEX позволяют вам отвечать за запрос.

3
ответ дан simendsjo 25 August 2018 в 22:32
поделиться

Вот онлайн-демонстрация, показывающая, что порядок условий предложения 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?

- «Иногда это может сделать».

11
ответ дан Steve Chambers 25 August 2018 в 22:32
поделиться

Порядок столбцов в предложении where не имеет большого значения, так как MySQL будет оптимизировать запрос перед его выполнением. Но я предлагаю вам прочитать главу Optimization в справочном руководстве MySQL, чтобы получить основную идею о том, как анализировать запросы и таблицы, и при необходимости оптимизировать их. Лично я всегда старался помещать индексированные поля перед неиндексированными полями и упорядочивать их в соответствии с количеством строк, которые они должны возвращать (в большинстве случаев ограничительные условия, наименее ограничительные).

4
ответ дан wimvds 25 August 2018 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: