MySQL - mysqli 를 사용할 수 없을때 멀티쿼리 및 MYSQL 내부 변수 선언 활용

원글 : http://www.lovelgw.com/Blog/143  

웹 개발시에  불필요한 내부 질의를 없애기 위해 MySQL 내부 변수를 활용하고 또, mysqli가 지원하지 않는 서버에서 멀티 쿼리를 이용하는 방법이다. 

실제적으로 mysqli_multi_query에서 사용하는 방식은 아니지만 해당 쿼리에 대한 질의를 버퍼링 하지 않고 그대로 다음 행으로 진행을 한다. 

내부 변수 사용은 질의 내용에서 사용되는 값이 계속적으로 질의 하거나 또는 서브쿼리를 지원하기 힘든 MySQL 4.0 이하 서버에서 활용 가능하다. 

내부 변수는 PHP에서의 커넥션 에서만 유효하다. 한 커넥션이 끊기면 그 이후에는 다시 선언을 해주어야 한다. 

내부 변수 활용으로 얻는 잇점은 활용면에서 많다.
01.// MySQL 내부변수를 초기화 시킨다.
02.$strQuery = 'set @nCnt = 0;';
03. 
04.// 질의 결과행을 버퍼링 하지 않는 mysql_unbuffered_query로 질의 한다.
05.mysql_unbuffered_query($strQuery, $rConn);
06. 
07.// 변수에 값을 넣는다.
08.$strQuery = 'select @nCnt:=count(fieldname) from tablename;';
09. 
10.// 질의 결과행을 버퍼링 하지 않는 mysql_unbuffered_query로 질의 한다.
11.mysql_unbuffered_query($strQuery, $rConn);
12. 
13.// 변수에 설정된 값을 이용해 질의 한다.
14.$strQuery= 'SELECT ROUND((count(fieldname) / @nCnt) * 100, 3) AS percent FROM tablename GROUP By fieldtype;';
15. 
16.// 결과를 출력한다.
17.$rRes = mysql_query($strQuery, $rConn);
18.while($arrTest = mysql_fetch_assoc($rRes))
19.{
20.var_dump($arrTest);
21.}
22.mysql_free_result($rRes);
ㅟ와 같이 PHP 에서 내부변수를 활용하는 방식이다. 위 예제는 전체 row수를 구한 후에 해당 타입에 대한 비율을 구하는 방식으로 SubQuery 를 이용하지 않고 내부 변수에 저장된 전체 row수를 이용해 비율을 구한것이다. 

보통 PHP에서 그 결과를 가지고 다시 계산하는 것 보다는 MySQL 에서 결과 값만을 가지고출력하는것이 전체적은 퍼포먼스에 더 좋은 성능을 나타낸다.