Оптимизация поиска : что лучше SQL запрос или какая-нибудь структура в PHP?

arbitbet.com

Новичок
Оптимизация поиска : что лучше SQL запрос или какая-нибудь структура в PHP?

ВХОД:
Есть таблица А с именами(поле name, индексированное) и кодами(id) этих имен. Количество строк около 15000. Скрипт получает на вход массив с именами около 4000. Таких скриптов работающих параллельно может быть от 0 до 100.
ЗАДАЧА:
Нужно для каждого имени получить id.
ИДЕЯ А:
В лоб. В цикле для каждого имени в массиве выполняем что-то типа : $query = 'SELECT `id` FROM `A` WHERE `name` = \''.$name.'\'';
ИДЕЯ В:
Делаем один запрос $query = 'SELECT * FROM `A`'; Затем сохраняем в ассоциативном массиве типа $names[$name] = $id; После чего в цикле получаем id для каждого имени из массива names.
Какая идея будет работать быстрее? Предложите свою идею.
Спасибо за внимание.
 

arbitbet.com

Новичок
Да, если возможно дайте свою оценку в процентах о скорости выполнения скрипта. Например вторая на 50% или на 500% будет работать быстрее чем первая.
 

zerkms

TDD infected
Команда форума
arbitbet.com
это будет глупая, ни о чём не говорящая оценка.

"быстрее в 2 раза" при том что на деле это "быстрее на 0.000001с"
лучше чем:
"быстрее на 10%" при том, что "10% это 5 секунд"

м?
 

Adelf

Administrator
Команда форума
arbitbet.com
Когда меня интересовали такие вопросы - я генерил данные и проверял. Даже 100 процессов одновременно можно попытаться проверить.
Все будет зависеть от конкретного случая, конкретной конфигурации сервера.. от много чего.

Начинаю прикидываться телепатом:
Но при 4000 тысячах из 15.. конечно правильней все 15 загрузить и на массиве играться. Но Может не хватить памяти серверу если 100 процессов одновременно запросят памяти под такие массивы.
Что-то типа memcache, кстати, может тут спасти в таком случае.
закончил
 

zerkms

TDD infected
Команда форума
прикидываюсь КО:

... WHERE `name` IN ('name1', ..., 'name4000')
 

arbitbet.com

Новичок
большое спасибо за помощь, с оценкой вы абсолютно правы, я тоже придерживаюсь мнения что массивы + memcache более быстрый вариант.
 

Фанат

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

arbitbet.com

Новичок
Далее пары id, подряд идущих, передаются в функцию, которая по дополнительным параметрам ищет в таблице B соответствия.
 

Adelf

Administrator
Команда форума
arbitbet.com
задачу целиком ты не описал.

[telepat]
Помоему, система плохо спроектирована
[/telepat]
 

damngood

Мозг был, но ушел...
Я бы запихнул 4к в временную таблицу в mysql, потом бы сделал все запросом
 

Farsh

~ on ~ high ~ wave ~
а я бы закэшировал все данные где-нибудь в apc/xcache/../memcache ( можно даже попробовать в качестве ключа использовать name )
 

damngood

Мозг был, но ушел...
Он имел в виду наверное, что выбрать все 15к записей и сунуть в memcached. А вот как тут боком вылезли оптимизаторы типа apc, я что-то не представляю. Самому интересно)))
 

zerkms

TDD infected
Команда форума
damngood
в APC есть разделяемая память. весьма быстрая, кстати.
 

damngood

Мозг был, но ушел...
Знаю, только с ней не доводилось иметь дело( Привык к memcached.
 

Farsh

~ on ~ high ~ wave ~
Автор оригинала: Alexandre
интересно - а каким образом?
можно с этого места поподробнее?
Как, как ;)) Вот так ;)
Все знакомые мне опкод кэшеры имеют юзерский кэш, который и является маленький подобием memcache ( хотя работает он быстрее )
 
Сверху