|
Утверждение 1: префикс процентного знака %-джокера заставит SQL-запросы остановить индекс и вместо этого использовать полное сканирование таблицы. Это утверждение популярно Вывод неверен На самом деле это утверждение не очень точно. Префикс wildcard % делает поиск индексов в SQL чрезвычайно эффективным, но в большинстве случаев он всё равно пойдёт в индекс (полный текст не требуется, просто постройте обычный индекс). СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС [Ix_index NAME] НА [dbo]. [wkf_ Название стола]
( [db_title] ASC
) Казни в это время ВЫБЕРИТЕ топ-10 [db_id],[db_Summary],[db_AddDate],[db_title] ИЗ [название библиотеки]. [DBO]. [wkf_database] где [db_title] как '%dba%' по 1 desc.
План запроса чётко отображается
Перед индексированием сравнения:
В качестве исключения — сложные запросы. Оптимизатор запросов может отказаться от индекса в пользу полного сканирования таблицы. Это касается не только LIKE '%keyword%', но и сложности запросов
Утверждение 2: Процентный процент префиксов джокера сделает SQL-запросы индексными, а не индексными
Это утверждение очень одностороннее, и 99% индекса снижает IO и повышает эффективность по сравнению с отсутствием индексации, но действие по подбору ключей после обнаружения индекса также частично требует производительности. Как показано на двух рисунках выше, если ключевые слова легко сопоставить, полный скан таблицы быстро находит данные, и индексное сканирование не экономит достаточно времени, чтобы компенсировать время, потраченное на действие сопоставления ключей (большинство онлайн-запросов не имеют такой проблемы). Лечение: 1. Если вам это не важно, дополнительное расходование производительности не очень велико. И разные ключевые слова имеют разное потребление, но некоторые ключевые слова имеют эту проблему и могут быть проигнорированы 2. Лучший способ — построить индекс переопределения (также известный как индекс INCLUDE), если условия это позволяют. Предпосылка: a. Пространство памяти достаточно, b не влияет существенно на операции DML, и c не имеет больших полей в перезаписанном индексе СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС [Ix_index NAME] НА [dbo]. [wkf_ Название стола]
( [db_title] ASC
) ВКЛЮЧИТЬ ( [db_id],[db_Summary],[db_AddDate]) На данный момент план выполнения запроса выглядит так, что гораздо более освежающе
Приведённое выше — то, что я сейчас могу представить для обработки SQLSERVER: ВЫБЕРИТЕ * ИЗ ИМЕНИ ТАБЛИЦЫ, НАПРИМЕР '%Keyword %'
|