Уникальные функции или большее количество?
Можете сделать одну функцию, куда в качестве параметра передавать ассоциативный массив. Внутри функцию в зависимости от того, какие параметры переданы, добавлять условия в WHERE.
Это не важно. Оба варианта рабочие. Гораздо важнее правильно спроектировать базу данных, поэтому лучше гляньте литературу на тему проектирования БД, когда нужна нормализация, когда нет и как проектировать с учетом возможного разделения одной БД на несколько частей(шардинг). И про репликацию стоит почитать. И еще про индексированный полнотекстовый поиск(elastic search, sphinx) и про кэширование(redis, memcache и т.п.).