Индексный MySQL <or> запросы?

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


Общее правило для размещения typename в основном, когда вы используете параметр шаблона, и хотите получить доступ к вложенному typedef или с использованием псевдонима, например:

template
struct test {
    using type = T; // no typename required
    using underlying_type = typename T::type // typename required
};

Обратите внимание, что это также относится к метафункциям или вещи, которые также принимают общие параметры шаблона. Однако, если предоставленный параметр шаблона является явным типом, вам не нужно указывать typename, например:

template
struct test {
    // typename required
    using type = typename std::conditional::type;
    // no typename required
    using integer = std::conditional::type;
};

Общие правила добавления определителя template в основном аналогичны, за исключением они обычно включают шаблонные функции-члены (статические или другие) структуры / класса, которые сами шаблоны, например:

Учитывая эту структуру и функцию:

template
struct test {
    template
    void get() const {
        std::cout << "get\n";
    }
};

template
void func(const test& t) {
    t.get(); // error
}

Попытка доступа t.get() изнутри функции приведет к ошибке:

main.cpp:13:11: error: expected primary-expression before 'int'
     t.get();
           ^
main.cpp:13:11: error: expected ';' before 'int'

Таким образом, в этом контексте вам понадобится ключевое слово template заранее и вызвать его так:

t.template get()

Таким образом, компилятор будет анализировать это правильно, а не t.get < int.

10
задан vishuB 23 December 2015 в 07:08
поделиться

4 ответа

Возможно. В целом, если будет такой индекс, то он будет использовать сканирование диапазона на том индексе, если не будет никакого "лучшего" индекса на запросе. Однако, если оптимизатор решит, что диапазон закончил бы тем, что был слишком большим (т.е. включал бы больше, чем, сказал бы 1/3 строк), то он, вероятно, не будет использовать индекс вообще, поскольку сканирование таблицы, вероятно, было бы быстрее.

Используйте ОБЪЯСНЯЮТ (на ВЫБОРЕ; Вы не можете ОБЪЯСНИТЬ удаление) определить его решение в конкретном случае. Это, вероятно, будет зависеть от

  • Сколько строк там находится в таблице
  • Что диапазон - то, что Вы указываете
  • Что еще указано в операторе Where. Это не будет использовать сканирование диапазона одного индекса, если будет другой индекс, который "выглядит лучше".
11
ответ дан 3 December 2019 в 20:45
поделиться

Из Справочника MySQL:

Индекс B-дерева может использоваться для сравнений столбца в выражениях, которые используют =,>,> =, <<=, или операторы BETWEEN.

Для большого количества строк это может быть намного быстрее к поиску строки через древовидный индекс, чем посредством сканирования таблицы. Но поскольку другие ответы указывают, используют EXPLAIN узнать решение MySQL.

4
ответ дан 3 December 2019 в 20:45
поделиться

Индекс на поле даты и времени определенно поможет с основанными на диапазоне дат поисками. Мы используем их все время в наших базах данных, и запросы являются смехотворно медленными без индексов.

2
ответ дан 3 December 2019 в 20:45
поделиться

Это делает, сверяется с таблицей DESCRIBE SELECT FROM...

1
ответ дан 3 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

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