Не знаю как лучше сделать отбор данных, есть табличка в бд в которой 8 полей из них нужно фильтровать данные по 5 полям, думал сделать простым запросом "SELECT * FROM table WHERE col1 = '1' AND col2 LIKE '%2% AND col3 REGEXP '\s''' примерно так, в таблице не более 20 строк, но они периодически меняются. Всего планируется что будет ~600к таких селектов в день и столько же инсертов в другие табличке на основании полученных данных. Или лучше будет получить все данные из это таблице и в php сделать отбор? Очень важна скорость работы скрипта. Mysql выбрал потому что с ним только и работал) Вообщем товарищи эксперты, подскажите как лучше сделать и что можно применить для увеличения быстродействия(другой тип базы,или какой ни будь кеш сделать)
Ну, а если еще захотите использовать некое кеширование то тут я не силен - скажу только что использую в первом запросе сохранение данных с него в кеш и периодически обновляю ID строк которые туда попадают.
Anton: Если получать с первого раза только результирующие - записывать их и потом с помощью них выбирать из IN то мне кажется будет быстрее чем генерировать статику.
Спасибо за ссылки)) Сервер мощный, но тут и получается что один человек один селект+инсерт. Join сильно замедляет запрос? А если вместо joina использовать подзапрос: "SELECT * FROM table1 WHERE col1 = (SELECT col2 FROM table2 WHERE table1.id = table2.id)" так лучше будет?
Snort: А вам нужен этот Join - я его просто так упомянул ибо у вас простой селект с критериями. Тут сам вопрос в кешировании - нужно оно вам или нет. тут вам придется ссылки искать самому - все в основном зависит от настроек и идексирования. Прогнать Mysql можно mysqltuner.com
Snort: у вас выходит зависимость по данным с подзапросом, в этом случае MySQL не будет особо пытаться это дело оптимизировать. С JOIN-нами хотя бы есть варианты и прогнозируются они лучше.
Если речь о 20-и строках, то вопрос о скорости не имеет смысла. Можешь делать в базе, можешь в скрипте, а можешь попеременно - на скорости это никак не скажется.
В целом же, для нормальных, а не микроскопических баз данных, любую фильтрацию надо делать только в базе.
Поиски же более быстрого решения надо производить только тогда, когда текущее тормозит.