powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / char(2) vs char(4)
23 сообщений из 23, страница 1 из 1
char(2) vs char(4)
    #39043992
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- есть поле char(4) c индексом, в котором хранится строковый идентификатор, который обозначает тип объекта

- всего в системе 30-40 типов объектов, ну может быть 50-60, но порядок именно такой - десятки, не сотни и не тысячи

пара вопросов:

1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd'

2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab'
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39043997
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd'Смотря на каком фоне сравнивать. Для искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно. В большинстве реальных запросов на фоне сложной логики, подзапросов, сортировок и т.п. это будет почти незаметно.
Lumix2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab'Если общая логика запроса идентична, то без разницы. Для внешних JOIN-ов, разумеется, общая логика будет нарушена и сравнение некорректно.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044000
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, ок, будем тогда использовать как можно меньше букв
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044013
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДля искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно.Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__'

Что касается varchar... наверное, разница есть, но, при n-арном поиске в индексе, - вряд ли заслуживающая упоминания...

Впрочем, могу ошибаться в особенностях MySQL :)
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044016
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007miksoftДля искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно.Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__'Если в обоих случаях тип char(4), то разницы не будет.
Я подразумевал разницу между char(2) и char(4) (из заголовк топика).
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044017
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixmiksoft, ок, будем тогда использовать как можно меньше буквА нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044018
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixmiksoft, ок, будем тогда использовать как можно меньше буквА нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа.Плюс еще одна табличка с расшифровкой кода ;-)
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044019
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007miksoftпропущено...
А нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа.Плюс еще одна табличка с расшифровкой кода ;-)При нескольких десятках двухбуквенных сочетаний, подозреваю, ее все равно не избежать :)
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044029
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix- есть поле char(4) c индексом, в котором хранится строковый идентификатор, который обозначает тип объекта

- всего в системе 30-40 типов объектов, ну может быть 50-60, но порядок именно такой - десятки, не сотни и не тысячи

пара вопросов:

1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd'

2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab'


нет никакой разницы.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044070
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007пропущено...
Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__'Если в обоих случаях тип char(4), то разницы не будет.
Я подразумевал разницу между char(2) и char(4) (из заголовк топика).

Я, конечно, приношу извинения, что внес небольшую путаницу, но в данном случае эта путаница оказалось полезной, потому что я узнал для себя много новых ньюансов.

Раз уже зашла такая маза, то осталось спросить как в этом случае будет вести себя char(4) но с индекском char(2)? ближе к скорости char(4) или ближе к скорости к char(2) или вообще это как бы почти что char(3)?

А информация о том, что type = 'ab' и type = 'abcd' на char(4) имеют одинаковую скорость поиска - это очень крутая информация. Спасибо!!
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044072
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftCygapb-007пропущено...
Плюс еще одна табличка с расшифровкой кода ;-)При нескольких десятках двухбуквенных сочетаний, подозреваю, ее все равно не избежать :)

Ну, конечно, всем понятно, что на интах будет летать шустрее всего.
Но с буквами проще производить отладку системы.

Мы уже давно пользуемся этим приемом и поэтому тихим субботним вечером в этой теме я лишь хотел узнать цену подобного технического решения, то есть насколько сильно мы теряем. В данном случае, я понял, что когда задан char, то можно смело пользоваться идентификаторами на всю его длину.

Что касается таблицы с расшифровками, то этого не требуется, потому что буквы означают таблицы, которые используются в системе. Две буквы приходиться использовать когда в системе есть таблица pages и posts, тогда не понятно что означает буква 'p', поэтому мы используем 'pa' и 'po'

В результате же сегодняшней темы, я уже написал всем рассылку, что можно смело использовать 'page' и 'post', потому что скорость все равно будет та же самая.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044093
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixА информация о том, что type = 'ab' и type = 'abcd' на char(4) имеют одинаковую скорость поиска - это очень крутая информация.Да нет в этом ничего особенно крутого. Разница если и была бы, то мизерная.
Не вижу смысла заморачиваться на такого рода мелочи в малых и средних проектах. А когда дорастет до крупных - там, опять же, покрупнее проблемы вылезут.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044095
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixбуквы означают таблицы, которые используются в системеНе знаю почему, но мне этот метод очень не нравится. Попахивает плохим проектированием БД.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044109
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixбуквы означают таблицы, которые используются в системеНе знаю почему, но мне этот метод очень не нравится. Попахивает плохим проектированием БД.

в этой таблице хранятся флаги по каждому пользователю в отношении разных объектов

Код: sql
1.
(id, userId, tableMark, tableRowId, flag1, flag2, flag3, flag4, flag5)



по общечеловеческим понятиям вместо tableMark на каждую таблицу создается своя таблица, а у нас одна общая таблица но в ней как бы "флаг" tableMark который за неё и отвечает

ну а чтобы тогглы робили на insert ... update on duplicate key мы юзаем констранту unique(userId, tableMark, tableRowId)

может и кривовато с точки зрения науки, но в реале пока полет нормальный...
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044178
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixРаз уже зашла такая маза, то осталось спросить как в этом случае будет вести себя char(4) но с индекском char(2)? ближе к скорости char(4) или ближе к скорости к char(2) или вообще это как бы почти что char(3)?

Мужчина, ну и проблемы, блин, у тебя... мне бы такие.

Поле делай varchar(255).
Индекс делай на поле целиком.
ВСЁ.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044182
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Lumix
Ну, конечно, всем понятно, что на интах будет летать шустрее всего.
Но с буквами проще производить отладку системы. [/quot]

Мужчина, все СУБД работают со скоростью, пропорциональной скорости чтения диска, и, соответственно, обратно пропорциональной количеству чтений с диска.

Тебе надо напоминать, что скорости обработки данных в памяти в тысячу-сто тысяч раз быстрее, чем чтение с диска ?

Именно поэтому типы данных в таблицах не имеют для скорости их обработки практически никакого значения.
Ты должен выбирать типы данных, основываясь на предметной области приложения и требовании доменной целостности данных.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044415
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, ок! Спасибо!! Особенно очень ценно про диски и память.

Изначально в основе всей этой ветки не было какой-то конкретной проблемы, которая прямо сейчас остановила весь продакшен. В основу этой ветки были положены какие-то мелкие глубинные давние страхи, которые появилось время развеять и я их развеял. В простонародье эти страхи вообще именуют "тараканами в голове". Вот я этих тараканов почистил и теперь с чистой душой буду воспринимать все те типы данных, которые сейчас используются в продакшене.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044428
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Против такого рода "тараканов" помогает качественно проведенное тестирование.
Грубо говоря - надо взять и попробовать. Это помогает куда лучше, чем буквы на форуме. :)
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044505
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, неее... сколько тестов не проводили, тараканы все равно остаются. А вот пообщались тут предметно за выхи и они все сдохли. :-)
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044700
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока есть время, сделал тест (для особо придирчивых - в ЛОБ, не вдаваясь в объем ОЗУ и настроек системы)
тестовая таблица 3 млн записей
вставлялись за 3 раза RAND()*100 и RAND()*10000 в p1 CHAR(2) и p2 CHAR(4) (думал разбросать индекс чуть-чуть по диску механически...)
indexP1 key len 7
indexP2 key len 13
селективность indexP1 1%
селективность indexP2 0,01%
запрос1 WHERE param1="12" 30000 записей 1,5 сек
запрос2 WHERE param2="1234" 300 записей 0,5 сек

в то же время были удалены все записи с p1="45" и p2="4545"
и добавлены заново 1000 записей (45,4545) - селективность - мизер
запрос1 SELECT SQL_NO_CACHE ... WHERE param1="45" 1000 записей 0,01 сек
запрос2 WHERE SQL_NO_CACHE ... WHERE param2="4545" 1000 записей 0,01 сек

практически от длины поля и индекса время выполнения не зависит, только от селективности
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044708
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправлюсь Alex_Ustinov...
практически от длины поля и индекса время выполнения не зависит, только от селективности И КОЛИЧЕСТВА ДАННЫХ в ВЫБОРКЕ
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044876
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixMasterZiv, ок! Спасибо!! Особенно очень ценно про диски и память.

Изначально в основе всей этой ветки не было какой-то конкретной проблемы, которая прямо сейчас остановила весь продакшен. В основу этой ветки были положены какие-то мелкие глубинные давние страхи, которые появилось время развеять и я их развеял. В простонародье эти страхи вообще именуют "тараканами в голове". Вот я этих тараканов почистил и теперь с чистой душой буду воспринимать все те типы данных, которые сейчас используются в продакшене.

Вот именно.
Тебе давно пора перестать бояться и начать делать что-то.
А как упрёшься в какие-то проблемы производительности -- будешь думать.
...
Рейтинг: 0 / 0
char(2) vs char(4)
    #39044878
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumix,

Против такого рода "тараканов" помогает качественно проведенное тестирование.
Грубо говоря - надо взять и попробовать. Это помогает куда лучше, чем буквы на форуме. :)

Против тараканов помогает опыт. Свой или иногда чужой.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / char(2) vs char(4)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]