SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.07.2014 22:53:14

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

TEXT или VARCHAR?

Есть поле, можно его оставить как TEXT, а можно переделать в VARCHAR. Если столбец не задействован в ключах и не используется при поиске, будет ли больше производительности от VARCHAR?


Скажи миру - НЯ!

Неактивен

 

#2 23.07.2014 23:20:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Неактивен

 

#3 24.07.2014 01:20:49

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: TEXT или VARCHAR?

vasya написал:

http://sqlinfo.ru/forum/viewtopic.php?id=38

А теперь контрольный выстрел (правильно ли я поняла там написанное)

"Так как TEXT хранится вне строки таблицы (а только ссылка на него)... ТО его использование.... ЗАМЕДЛЯЕТ процесс выдачи информации"

Верно понято?


Я до сих пор не до конца понимаю низкую механику работы движка. И отсюда вытекающий вопрос. Если у меня всегда много текста в полях(VARCHAR), это тем самым увеличит время поиска по таблице (вариант без ключей, аналог type:ALL из expand, поиск не по этому столбцу), ввиду того, что сам файл таблицы большего размера?

Я это к тому, что если первое понято мной верно, и второе предположение верно, то выходит если текста всегда длинные, то лучше TEXT, а если короткие, то лучше VARCHAR.

Если где ошиблась, поправьте пожалуйста.


Скажи миру - НЯ!

Неактивен

 

#4 24.07.2014 12:05:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: TEXT или VARCHAR?

animegirl написал:

"Так как TEXT хранится вне строки таблицы (а только ссылка на него)... ТО его использование.... ЗАМЕДЛЯЕТ процесс выдачи информации"

- речь идет именно о выдаче информации, а не поиске. Грубо: строка это последовательный кусок данных, который считывается головкой диска за один проход, а в случае наличия TEXT требуется дополнительное перемещение головки диска в другое место.



animegirl написал:

Я до сих пор не до конца понимаю низкую механику работы движка. И отсюда вытекающий вопрос. Если у меня всегда много текста в полях(VARCHAR), это тем самым увеличит время поиска по таблице (вариант без ключей, аналог type:ALL из expand, поиск не по этому столбцу), ввиду того, что сам файл таблицы большего размера?

Замена varchar на text размер файла таблицы не уменьшит.


animegirl написал:

Я это к тому, что если первое понято мной верно, и второе предположение верно, то выходит если текста всегда длинные, то лучше TEXT,

неверно.

Неактивен

 

#5 24.07.2014 12:56:49

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: TEXT или VARCHAR?

vasya, а почему неверно?

Длинный текст прямо посреди данных (VARCHAR) будет сильнее мешать их выбирать, чем длинный текст, отдельно стоящий (TEXT). Разве нет?
(Хотя сам такой текст будет выбираться дольше, т.к. в случае TEXT нужна дополнительная операция чтения в другом месте)

Неактивен

 

#6 24.07.2014 17:38:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: TEXT или VARCHAR?

Ты прав, но я отвечал на другой вопрос:
про "увеличит время поиска по таблице (вариант без ключей, аналог type:ALL из expand, поиск не по этому столбцу)".
Сервер читает заголовок каждой строки, потом нужный столбец, далее заголовок новой строки. Т.е. varchar или text лишь определяют длину последовательных прыжков, что имхо не принципиально.

Неактивен

 

#7 24.07.2014 17:51:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: TEXT или VARCHAR?

Учитывайте, что если данные хранятся далеко, то переход диска на другу дорожку (если не SSD) займет порядка 10 мс. Если переход не требуется, то последовательное чтение может выполняться со скоростью около 100 мегабайт в секунду. Негатив от переключения диска частично компенсируется дисковым кэшем, но это не гарантировано.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson