индекс, char,

VictorKr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я рекомендую взять в качестве перфикса первые 16-64 байт.
 
фальк, как я понял, нужен весь текст.
скажи, а чем хеш-то плох?
 
Фанат
Зачем тебе весь текст хранить в индексе. После сравнения индексов ему придется проверить 1-2 записи как правило и не придется лишний раз считать md5.

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

Вот это уже точно лишнее.
 
молодые люди.
Давайте все вместе попридержим досужие языки и подождем специалистов.

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