Consulta a base de datos

Buenas tardes, muchach@s estoy intentando hacer un codigo en el que despues de introducir un numero de cedulad de identidad en un textbox ejecute una funcion en la que realice una busqueda en base de datos y me traiga nombre y apellido de la tabla tbl_persona, mi codigo lo hace pero el problema es que tarda aproximadamente 1min, cuando hago el query desde pgadmin tarda 1 segundo. quiero saber si estoy haciendo algo mal(Cabe destacar que la tabla tiene aproximadamente 25 millones de registros ). aqui mi codigo

el div desde el form (Create)




<div class="row">

		<?php echo $form->labelEx($model,'Busque una persona');?>

		

		<?php echo CHtml::activeTextField($model,'buscarcedula',

				array('value'=> ($model->isNewRecord ? '' : $model->idpersona0->cedula),

						'id'=>'cedula','style'=>"width:10%",'onkeypress'=>'return soloNumeros(event, this)',

                'ajax'=>array(

                    'type'=>'POST',

                    'url'=>CController::createUrl('TblPersona/buscarnombrecompletoMA'),

                    'update'=>'#nombrediv'

                )

               ));?>

             

		<div id="nombrediv">

		<?php echo $form->textField($model,'idpersona',array('style'=>'display:none')); ?>

		<?php echo $form->textField($model,'datos',array('value'=>($model->isNewRecord ? '' : $model->idpersona0->nombre.' '.$model->idpersona0->apellido), 'style'=>'width:50%', 'readonly'=>true)); ?>

		</div> 

	</div>



mi funcion de busqueda.




public function actionbuscarnombrecompletoMA()

	{

	

		$cedula2 = $_POST['TblMaximaautoridad']['buscarcedula'];

	

		if (isset($cedula2)){

			$idpersona2=Yii::app()->db->createCommand("SELECT id FROM tbl_persona WHERE cedula = ".$cedula2)->queryScalar();

				

			$nombres=Yii::app()->db->createCommand("SELECT nombre FROM tbl_persona WHERE cedula = ".$cedula2)->queryScalar();

			$apellidos=Yii::app()->db->createCommand("SELECT apellido FROM tbl_persona WHERE cedula = ".$cedula2)->queryScalar();

	

			if ($nombres != ''){

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_idpersona','type'=>'text' ,

						'value' => $idpersona2, 'readonly'=>true, 'name'=>'TblMaximaautoridad[idpersona]','style'=>'width:5%; display:none'));

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_datos','type'=>'text' ,

						'value' => $nombres.' '.$apellidos, 'readonly'=>true, 'style'=>'width:50%'));

					

			} else {

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_idpersona','type'=>'text' ,

						'value' => '', 'readonly'=>true, 'name'=>'TblMaximaautoridad[idpersona]','style'=>'width:5%; display:none'));

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_datos','type'=>'text' ,

						'value' => 'Personal no registrado', 'readonly'=>true, 'style'=>'width:50%'));

			}

				

		}else{

			break;

		}

	

	}



A simple vista puedo notar que haces la misma consulta 3 veces, una para obtener el id, otra para el nombre y una mas para el apellido, eso hace mas lento el proceso. Tienes que hacer una sola consulta utilizando queryRow por ejemplo


...

...

$persona2 = Yii::app()->db->createCommand("SELECT id, nombre, apellido FROM tbl_persona WHERE cedula = ".$cedula2)->queryRow();

$idpersona2 = $persona2["id"];

$nombres = $persona2["nombre"];

$apellidos = $persona2["apellido"];

...

...






Muchas gracias a18327 una vez mas ayudandome :) te dejo un puntico. así quedo la funcion y el _form para si alguien necesita o si hay algo mas que corregir, el tiempo de espera se redujo considerablemente, ahora tarda 20 segundos, en el pg_admin solo dura 1 segundo lo que me parece raro, pero es aceptable.

_form




<!-- ************************************************************************************************************************* -->	

<!-- ************************************************************************************************************************* -->	

	<div class="row">

		<?php echo $form->labelEx($model,'Busque una persona');?>


		<?php echo CHtml::activeTextField($model,'buscarcedula',

				array('value'=> ($model->isNewRecord ? '' : $model->idpersona0->cedula),

						'id'=>'cedula','style'=>"width:12%",'onkeypress'=>'return soloNumeros(event, this)', 'placeholder'=>'Indroduzca Cédula',

                'ajax'=>array(

                    'type'=>'POST',

                    'url'=>CController::createUrl('TblPersona/buscarnombrecompletoMA'),

                    'update'=>'#nombrediv'

                )

               ));?>

             

		<div id="nombrediv">

		<?php echo $form->textField($model,'idpersona',array('style'=>'display:none')); ?>

		<?php echo $form->textField($model,'datos',array('value'=>($model->isNewRecord ? '' : $model->idpersona0->nombre.' '.$model->idpersona0->apellido), 'style'=>'width:50%', 'readonly'=>true, 'placeholder'=>'Información personal')); ?>

		</div> 

	</div>

<!-- ************************************************************************************************************************* -->

<!-- ************************************************************************************************************************* -->		




funcion en el controller




public function actionbuscarnombrecompletoMA()

	{

		$cedula = $_POST['TblMaximaautoridad']['buscarcedula'];


		if ($cedula == ""){

			echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_idpersona','type'=>'text' ,

					'value' => '', 'readonly'=>true, 'name'=>'TblMaximaautoridad[idpersona]','style'=>'width:5%; display:none'));

			echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_datos','type'=>'text' ,

					'value' => '', 'readonly'=>true, 'style'=>'width:45%', 'placeholder'=>'Información personal'));

		}else{

			 

		$datos = Yii::app()->db->createCommand("SELECT id, nombre, apellido FROM tbl_persona WHERE cedula = ".$cedula)->queryRow();

		

		$idpersona = $datos["id"];

		$nombres = $datos["nombre"];

		$apellidos = $datos["apellido"];

		

		

			if ($datos == ""){

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_idpersona','type'=>'text' ,

						'value' => '', 'readonly'=>true, 'name'=>'TblMaximaautoridad[idpersona]','style'=>'width:5%; display:none'));

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_datos','type'=>'text' ,

						'value' => 'Personal no registrado', 'readonly'=>true, 'style'=>'width:50%'));

					

			} else {				

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_idpersona','type'=>'text' ,

						'value' => $idpersona, 'readonly'=>true, 'name'=>'TblMaximaautoridad[idpersona]','style'=>'width:5%; display:none'));

				echo CHtml::tag('input', array('id'=>'TblMaximaautoridad_datos','type'=>'text' ,

						'value' => $nombres.' '.$apellidos, 'readonly'=>true, 'style'=>'width:50%'));

			}

		}

	

	}