2013-06-24 2 views
-1

У меня есть 2 поля varchar в базе данных. Один с размером 50, а другой с размером 2. Мне нужно сделать выбор, сравнивая с 2 полями. Я хочу знать, лучше ли сравнивать производительность с помощью короткого поля, а затем другого поля. Или точно так же?SQL Performance при сравнении строк

+0

Какое сравнение вы делаете? –

+0

также есть любое из полей в индексе? – JoseTeixeira

+0

Работа такая же, двигатель, скорее всего, оптимизирует запрос до кратчайшего метода. Попробуйте и то, и другое - это единственный реальный ответ, поскольку он зависит от статистики базы данных, индексов и РСУБД. – xQbert

ответ

2

Не имеет значения и у вас в основном нет контроля над ним. Когда вы говорите:

where col1 = 'A' and col2 = 'ABC' 

Механизм SQL может свободно сравнивать его в любом порядке. Фактически, это может сделать одно сравнение путем поиска значений в индексе и другого сравнения полученных результирующих значений в столбцах. Таким образом, то, что выглядит очень похоже в запросе, может иметь очень разные планы выполнения.

Также, как правило, операции над строками являются небольшим усилием по сравнению с чтением данных в первую очередь. Ваше время тратится на такие микро-оптимизации. Если вы хотите, чтобы ваш код работал быстрее, вам нужно подумать обо всей картине.

+0

У вас есть ** некоторые ** контроль ... просто не много. [ms SQL Hints] (http://msdn.microsoft.com/en-us/library/ms187713.aspx) или [Oracle] (http://docs.oracle.com/cd/B19306_01/server.102/b14200 /sql_elements006.htm#i35922) являются одной из форм контроля. Статистика базы данных будет другой. – xQbert

+0

@ xQbert. , , Вы правы, я не должен был писать «без контроля», поскольку в некоторых базах есть некоторый контроль. Однако даже подсказка Oracle 'Ordered_Predicates' не работает с индексами, и я не знаю об эквиваленте в SQL Server. –

+0

Это звучало неряшливо, и мне не нравилось писать его, но я не хотел, чтобы будущий читатель думал, что шансов нет. (Я бы с радостью удалил комментарии, если вы хотите изменить ответ!): D – xQbert