Предложения запроса, такие как where colname like '%something%'
, не могут использовать индексы и обычно приводят к полному сканированию возможных строк, чтобы определить, какие из них должны быть доставлены
Хотя, как указывает ChrisC в комментарииНесколько удивительно, что более эффективные предложения не используются для уменьшения набора строк-кандидатов до приемлемого размера, прежде чем пытаться использовать like
- возможно, статистика для таблицы недостаточно актуальна для анализа запроса, чтобы принять решениеэто - лучше всего запускать то, что считается для explain query
под SQL Server.
Причина, по которой ваш непохожий запрос настолько быстр, состоит в том, что он почти наверняка имеет индекс на MgmtLogHost
и / или MgmtLogTime
, которыйможет использоваться для быстрого отбрасывания ненужных строк.
Один способ, которым вы можете это исправить, - использовать что-то вроде триггеров вставки / обновления для обработки данных MgmtLogText
только после изменения, чтобы извлечьимена приложений и поместите их в отдельную таблицу, которая может быть намного лучше оптимизирована.
Даже просто используя such триггер для сохранения версии столбца в нижнем регистре (в другом столбце ) будет улучшением.Использование сортировки без учета регистра означает, что выборки выполняются медленнее, поскольку они должны учитывать классы XYZZY
и xyzzy
как равные.Если вместо этого вы сохраняете версию в нижнем регистре в таблице и проверяете, выполняется ли проверка в нижнем регистре, это усилие исчезает, так как вам остается беспокоиться только об одном случае.
И, делая все это в триггеревы гарантируете, что это делается только при необходимости (когда данные изменяются), а не каждый раз, когда вы хотите выбрать.Это амортизирует стоимость многих вариантов выбора.
Вы также можете использовать что-то вроде полнотекстового индексирования, если ваша СУБД поддерживает это, но я часто думал, что это похоже на попытку убить комаров с помощью термоядерной боеголовки.
Да, существуют ситуации, когда вам может понадобиться полнотекстовая индексация, но в подавляющем большинстве случаев вы можете повысить эффективность, немного более избирательно.