Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Cammomile Member Откуда: Сообщений: 1214 |
Есть 4 таблицы с GUIDами, в каждой по миллионов записей. Данные в таблицах копипаста. Я тут погонял тесты типа SELECT G1.ID FROM GUIDS G1 INNER JOIN GUIDS_J G2 ON G1.ID = G2.ID WHERE G1.ID IN (SELECT ID FROM #VG_E /* #VG_E 300к гуидов, упорядоченных */) И с изумлением обнаружил, что джойн GUID-GUID с фильтром по GUID в среднем в 2.4 раза быстрее чем VARCHAR -VARCHAR с фильтром по VARCHAR . При этом, мне казалось, зарубежная пресса ™ пишет, что джойн по VARCHAR не сильно проигрывает GUID. По мне 2.4 раза это весьма существенно. Вообще это нормальное поведение, или я что-то не учел в экспериментах? |
16 янв 18, 16:42 [21111479] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
*4 таблицы CREATE TABLE dbo.GUIDS ( ID uniqueidentifier primary key ) CREATE TABLE dbo.GUIDS_J ( ID uniqueidentifier primary key ) CREATE TABLE dbo.VARCHAR_GUIDS ( ID varchar(36) primary key ) CREATE TABLE dbo.VARCHAR_GUIDS_J ( ID varchar(36) primary key ) |
16 янв 18, 16:43 [21111481] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
я бы ставил на разницу в длинне, но может есть и более весомые аргументы |
16 янв 18, 16:49 [21111503] Ответить | Цитировать Сообщить модератору |
Шыфл Member Откуда: Прага Сообщений: 776 |
Ну ты что? Varchar - самый медленный join. В GUID 16 байт строго, а строка у тебя в 2 раза больше і к тому же переменной длінны. Даже не зная фізіку процесса, можно обоснованно предположіть, что... |
16 янв 18, 16:49 [21111505] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
ДЫк я понимаю что в два раза больше. Просто на всяких "технетах" и "скульблогах" (уже не найду) писали, что разница незначительна. Хотя если они там на два порядка меньше джойнили, то и правда незначительна... |
16 янв 18, 16:53 [21111517] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Cammomile,
SELECT (36+2)/16. 2.375000 :) |
||
16 янв 18, 16:57 [21111533] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Шыфл,
Как показал тест, CHAR(36) выигрывает по скорости какие-то крохи, так, что "варчарность" роляет слабо. |
||
16 янв 18, 17:00 [21111548] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Стесняюсь спросить но спршу, +2 это что? |
||||
16 янв 18, 17:04 [21111560] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
А, из доков. Вопрос снят. |
16 янв 18, 17:07 [21111569] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Cammomile, The storage size is the actual length of the data entered + 2 bytes. |
16 янв 18, 17:07 [21111570] Ответить | Цитировать Сообщить модератору |
04cf9f9576a6f15 Member [заблокирован] Откуда: Сообщений: 2927 |
#Хэш= |
||||
16 янв 18, 17:30 [21111624] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Я не решил. Это коллега Шифл сделал предположение, что вариативность варчара сказывается на скорости. На самом деле нет. |
16 янв 18, 17:38 [21111651] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Cammomile,
|
|
16 янв 18, 18:07 [21111733] Ответить | Цитировать Сообщить модератору |
04cf9f9576a6f15 Member [заблокирован] Откуда: Сообщений: 2927 |
А в данном конкретном примере скорее всего тупо из-за размеров данных процессору пришлось читать больше страниц. Как физически, так и логически. Отсюда и разница в скорости. Отсюда простой вывод: если размер ВСЕХ записей одинаков исходя из постановки задачи (например, номер паспорта, почтовый индекс), то вариативность будет лишней. Если данные на самом деле имеют существенный разброс в размерах (например, фамилия), то вариативность будет в плюс. #Хэш= |
||
16 янв 18, 18:14 [21111752] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Сравнение varchar - это сложный алгоритм, в котором веса символа зависят даже от расположения соседних символов. Делаете BIN - коллейшен, и скорость получается примерно как у GUID |
||
16 янв 18, 19:49 [21111968] Ответить | Цитировать Сообщить модератору |
04cf9f9576a6f15 Member [заблокирован] Откуда: Сообщений: 2927 |
#Хэш= |
||||
16 янв 18, 20:42 [21112075] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Которую, кстати, процитировал в ответе, как обычно я делаю. Надо читать, на что вы отвечаете :-)
И ещё размеры строк сделаем как в GUID, что бы не было разницы в размере полей
GUID 219 ms varchar 1968 ms char 2563 ms varchar bin 937 ms Можно ещё добавить CHAR BIN... PS char стабильно медленнее varchar, запускал несколько раз |
|||||||
17 янв 18, 00:04 [21112447] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
У меня без указания бинарного коллейшена чар был стабильно быстрее варчара, но на крохи. Типа варчар 3600 чар 3450. |
17 янв 18, 11:23 [21113162] Ответить | Цитировать Сообщить модератору |
04cf9f9576a6f15 Member [заблокирован] Откуда: Сообщений: 2927 |
|
||
17 янв 18, 11:37 [21113245] Ответить | Цитировать Сообщить модератору |
Гигабайт Мегабайтович Килобайтов Member [заблокирован] Откуда: Сообщений: 5975 |
мож у Алексея что не то с серваком? )) у меня - примерно одинаковые 1 и 4 и примерно одинаковые 2 и 3 , т.е. бинари примерно равно guid и guid быстрее binary на проценты. char примерно равен varchar. char на доли процента быстрее varchar. |
||||
17 янв 18, 11:53 [21113299] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Померял с колейшеном. Варчары с колейшеном джойнятся на четверть медленней чем нормальные GUIDы. Это, конечно, лучше чем в 2.4 раза, НО все же не сказать чтобы "незначительно". |
17 янв 18, 12:14 [21113369] Ответить | Цитировать Сообщить модератору |
Гигабайт Мегабайтович Килобайтов Member [заблокирован] Откуда: Сообщений: 5975 |
таки смотреть характеристики серверов? ибо у меня разница максимум 10% в среднем 2-4% , правда я делаю не в tempdb. |
||
17 янв 18, 12:22 [21113395] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
А вот какой смысл колейшн для гуида указывать кирилицу а не латынь? |
17 янв 18, 14:02 [21113882] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
там нет тайного смысла, он написал первый попавшийся binary |
||
17 янв 18, 14:08 [21113911] Ответить | Цитировать Сообщить модератору |
04cf9f9576a6f15 Member [заблокирован] Откуда: Сообщений: 2927 |
DECLARE @b UNIQUEIDENTIFIER = NEWID(); DECLARE @c CHAR(36) = @b; SELECT DATALENGTH(@b), DATALENGTH(@c)
#Хэш= |
|||||
17 янв 18, 15:49 [21114260] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |