Оптимизация запроса со сравнением строк

BelStudent

целеустремлённый чел
Оптимизация запроса со сравнением строк

Есть SQL-запрос:
SELECT `id` FROM `table` WHERE `fio`=$str
где $str - моя строка
Нужна оптимизация этого кода и я вот что подумал, сранение строк довольно медленно идёт, а может в таблицу БД записывать и СУММУ СИМВОЛОВ?
Примерно так:
Для фамилии Иванов мы получим:
s=ord('И')+ord('в')+ord('а')+ord('н')+ord('о')+ord('в')
А потом в WHERE уже забивать не сранение строк, а сравнение чисел.
Т.е. кажлому `fio` в БД получиться своё число.
Если случиться так что в таблице имется несколько одинаковых чисел (так получилось, что сумма одинакова), то только тогда сравнивать строки.
Ну как вам? Будет выигрыш в скорости? а?

p.s. только я вот подумал, а что если эти числа потом в БД отсортировать, например, по возрастанию?
Тогда если получили запрос с '..WHERE `fio`=$str' считаем сумму символов в строке $str, а потом с помощью билинейного поиска БЫСТРО находим нужный id.
Теоретически запросы должны летать.
 
совершенно верно. такая запись в бд, заранее отсортированная, называется "индекс".
 
Автор оригинала: *****
совершенно верно. такая запись в бд, заранее отсортированная, называется "индекс".
Что-то не понял тебя. Индекс это само-сабой, он сам добавляется (auto_increment), я же говорю о ПОЧТИ уникальном числе, которое ставиться в соответствие каждой строке.
 
Почитал про индексы. Так получается mysql автоматически делает индексы или опцию надо включить?
 
Автор оригинала: BelStudent
Почитал про индексы. Так получается mysql автоматически делает индексы или опцию надо включить?
нужно будет создать индекс на определенный столбец (группу столбцов)
 
Только учти что InnoDB не поддерживает full text search поэтому таблица должна быть MyISAM.
Если тебе нужен Full text search
А вообще в одном проекте я юзаю http://sphinxsearch.com/ - намного быстрей чем базы данных
То есть даже для поиска какого уникального куришь доки по сфинксу и вперед :)
 
Сфинкс я юзаю, но один маленький минус сфинкса - это "монолитность" индекса. Если база обнавляется динамически (например кеш запросов), то сфинкс здесь не помошник (не буду же я перезапускать его реиндексацию каждую минуту)
 
ммммммм - если я вас правильно понял. то вы говорите о проблеме индексации больших объемов данных
Почитайте тут
http://www.sphinxsearch.com/docs/current.html#live-updates
 
Над этим стоит подумать, м.б. схема main + delta и будет выходом.
Glazyrin Sergey, не знаешь статьи на русском по сфинкс есть. А то только одну нашёл на IBM.com. Но этого мало.
 
Я привел не потому что неустроил, а чисто привел свою точку зрения на то как лучше делать
 
но при этом ты не имеешь ни малейшего представления, ЧТО именно нужно сделать. но берешься решать - как лучше.
я тебе написал уже, в другом топике, про твою точку зрения. прими к сведению.
и вопрос был не тебе. поскольку ты на него ответить все равно не можешь.
 
Автор оригинала: *****
а чем обычный поиск по базе-то не устроил?
Пока думаю мне и стандартного хватит, но если Sphinx реально быстрее работает (согласно презентации (ppt-файл) Shodana на Интернет технологиях за 2007 год) зачем стандартный использовать?
 
вот я тоже думаю, что тебе и стандартного хватит, тем более, что ты про него только сегодня узнал.
 
ЗЫ У всех прошу прощения за возможно иногда не в тему мои комментарии
Сорри
Впредь буду стараться давать комментарии конкретно по теме :(
 
Сверху