индекс, char,

VictorKr

Новичок
индекс, char, поиск, скорость

у меня есть таблица
id(int) | text(text)

есть некая строка $str
select id from test where text=$str
собственно ид надо найти

я так подумал, и решил, что базе будет легче искать ид, если я буду искать не по тексту, а по мдишкам(этого текста) и ввел дополнительную таблицу

id(int) | md5(char32)
и бегаю по ней

кстати, раньше хранил мдишки вместе с ид и текстом, но мне показалось, что если никаких лишних столбцов не будет, то поиск будет быстрее,
так это или нет?

для меня очень важно!!! чтобы запись находилась быстро
вол-во записей вероятно будет более 5 000 000
какой индекс мне использовать для md5(char32)
и можно это как-то ещё оптимизировать?
 

Фанат

oncle terrible
Команда форума
Во-первых, я бы тебе все-таки порекомендовал создать тестовую таблицу на 5 лимонов записей, и потестировать разные варианты. Это будет лучше любых своетов на форуме.

Во-вторых, точно ли нужно поле типа текст? Оно же до 64 килобайт. Неужели ты все на полное совпадение ищешь?

В-третьих, я бы попробовал сделать индекс по md5(text). не индекс по столбцу с мд5, а просто индекс с такой функцией.

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

VictorKr

Новичок
>>Во-вторых, точно ли нужно поле типа текст? Оно же до 64 килобайт. Неужели ты все на полное совпадение ищешь?

строк таких мало, но они могут быть больше 255 символов, поэтому выбран такой тип поля

хранить их отдельно в разных таблицах...
да, наверное надо так и сделать
 

Demiurg

Guest
>хранить их отдельно в разных таблицах...
>да, наверное надо так и сделать
какие разные таблицы ? ты о чем ?

и ты так и не ответил на вопросы заданые тебе.
 

VictorKr

Новичок
>>какие разные таблицы ? ты о чем ?

если строка больше 255 символов то ищем в
id(int) | text(text)
иначе
id(int) | text(varchar)

>>и ты так и не ответил на вопросы заданые тебе.
я не вижу заданных мне вопросов кроме того, на который я уже ответил
 

Фанат

oncle terrible
Команда форума
я думаю, что это ненужный изврат.
тебе все-таки стоит сделать тест.
У меня очень сильное ощущение, что с индексом по хешу ри выборке по этому хешу все будет летать без каких бы то ни было ухищрений.
 

Falc

Новичок
VictorKr
Тебе надо создать индекс на префикс поля text (на первые n символов).
Выбор числа n зависит от данных, если у тебя много данных с одинаковым началом то надо взять n побольше, если начальные части данных сильно рознятся то можно и поменьше.

Я рекомендую взять в качестве перфикса первые 16-64 байт.
 

Фанат

oncle terrible
Команда форума
фальк, как я понял, нужен весь текст.
скажи, а чем хеш-то плох?
 

Falc

Новичок
Фанат
Зачем тебе весь текст хранить в индексе. После сравнения индексов ему придется проверить 1-2 записи как правило и не придется лишний раз считать md5.

Кстати в мане я не нашел, как создать индекс по md5(text), может подскажешь синтаксис?
 

JVN

Guest
1. Поле md5 есть смысл хранить в таблице test, сделав по нему, разумеется, индекс. Поиск будет идти в индексе размер которого не зависит, по идее, от полей, которые в него не входят.
2. Все таки надо попробовать перепроектировать приложение. Может этот текст можно разбить на короткую и длинную части? Например, на заголовок <= 255 и текст. Тогда по заголовку можно сделать обычный индекс, а по тексту полнотекстовый.
В общем, объясни подробнее что тебе нужно и как пришел к такой структуре БД?
 

Falc

Новичок
JVN
>>2. Все таки надо попробовать перепроектировать приложение. Может этот текст можно разбить на короткую и длинную части? Например, на заголовок <= 255 и текст. Тогда по заголовку можно сделать обычный индекс, а по тексту полнотекстовый.

Вот это уже точно лишнее.
 

Фанат

oncle terrible
Команда форума
молодые люди.
Давайте все вместе попридержим досужие языки и подождем специалистов.

JVN, тебя, как откровенного чайника,и человека, не умеющего читать темы, на которые отвечает, я персонально попрошу ничего не писать.
Попросить ткнуть носом, если есть такое желание - в привате.
 

JVN

Guest
Автор оригинала: Фанат
JVN, тебя, как откровенного чайника,и человека, не умеющего читать темы, на которые отвечает
Вот это уже в натуре зря...
Не буду тут по этому поводу флудить - это отдельная тема.
 

Falc

Новичок
Фанат
Я думаю автору тоже будет интересно узнать на него ответ. И потом он тесно пересекается с твоим ответом на вопрос автора.
 

Фанат

oncle terrible
Команда форума
Вот и подождем мнения специалистов, могущих ответить хотя бы на этот вопрос.
 
Сверху