2016-11-26 5 views
0

Каков наилучший способ оптимизации этого определенного запроса?Оптимизировать SQL по столбцу SUBSTRING или chunk

Например, у меня есть 10-значный номер телефона, и я хотел запросить любой из этих двух.

  1. ГДЕ ColumnName начинаются от 123456
  2. ГДЕ имя_столбца1 = 123 ИЛИ имя_столбца2 = 456

.

Первое: Использование SUBSTRING

SELECT * 
FROM table 
WHERE SUBSTRING(telephone, 1,6) 

данных:

id | telephone 
    1 | 1234560001 
    2 | 1234560002 

Второе: По отрывов колонки на куски

SELECT * 
FROM table 
WHERE pt1 = 123 AND pt2 = 456 

SELECT * 
FROM table 
WHERE pt1 = 123 OR pt2 = 456 

данных:

id | pt1 | pt2 | pt3 
    1 | 123 | 456 | 0001 
    2 | 123 | 456 | 0002 

Что лучше? СУБСТРИРОВАТЬ или разбить колонку?

ответ

1

Если вы хотите, чтобы эти условия:

  1. ГДЕ ColumnName начинаются от 123456
  2. WHERE имя_столбца1 = 123 OR имя_столбца2 = 456

Затем используйте LIKE или IN. Эти два условия:

WHERE columnName LIKE '123456%' 
WHERE columnName1 = 123 OR columnName2 = 456 

Первый может быть оптимизирована с использованием индекса на columnName. Второй не собирается использовать индекс в его нынешнем виде (но вы могли бы заставить использование индекса с помощью UNION/UNION ALL с более простыми WHERE пунктами.

+0

ли LIKE гораздо предпочтительным, чем SUBSTRING? –

+2

@JamVille... Гораздо предпочтительнее. Когда шаблон является константой/параметром и не начинается с подстановочного знака, то он может использовать индекс. –

 Смежные вопросы

  • Нет связанных вопросов^_^