dição Avançada ao MySQL. Acelerando a consulta

Tenho uma lista de usuários no meu aplicativo php (usando o codeigniter). Cada usuário pode ter preenchido um formulário com cerca de 1000 campos no total. A estrutura é semelhante a esta:

Comercia

id|username|...

complete_form_fields

id|formid|userid|fieldkey|data

where chave do campo é apenas uma chave exclusiva para esse campo de formulário específico, ou seja: "first_name"

Tenho uma página de pesquisa de usuários em que as pessoas podem filtrar usuários específicos pelos campos que escolheram (cor dos olhos, raça, sexo ...). Então, preciso exibir esses campos para que eu adorasse (e atualmente tenho) uma saída como esta :

$filteredmembers = array(
[0] = Object(
   [id] => 1
   [username] => kilrizzy
...
   [fields] => Array(
        [fname] => Jeff
        [gender] => Male
        ...

Atualmente, meu script está obviamente demorando uma eternidade, uma vez que consulta todos os membros que preencheram este formulário e, em seguida, percorre cada um deles para consultar todos os seus campos. ENTÃO filtre-os com base em critérios + página / deslocamento.

Sei que precisa haver uma maneira de uni-los em uma consulta com a qual não estou familiarizado

ersão simplificada do meu código muito lento:

function get_members(){
    $this->db->select('u.*');
    $this->db->from('users AS u');
    $query = $this->db->get();
    if ($query->num_rows() > 0){
        $members = $query->result();
        //Get fields from each user
        foreach($members as $mk => $mv){
            $fields = $this->get_form_fields($mv->id,1,true);
            $members[$mk]->fields = $fields;
        }
        return $members;
    }else{
        return false;   
    }
}
function get_form_fields($uid,$form,$values=false){
    $this->db->where('user', $uid); 
    $this->db->where('form', $form); 
    $query = $this->db->get('form_fields');
    if ($query->num_rows() > 0){
        $result = $query->result();
        return $result;
    }else{
        return false;   
    }
}

questionAnswers(3)

yourAnswerToTheQuestion