제가 insert query작성시...
insert into db_table SET field1 = '1', field2 = '2', field3 = '3';
이런식으로 작성을 합니다.
이런식의 작성이 기본적인 사용문인
insert into db_table (field1, field2, field3) values ('1', '2', '3');
보다 속도가 늦을까요?
아니면 둘 다 차이가 없을까요?
이런건 그냥 해보는게 나은 거 같습니다. 예측 불가능한 요소들이 워낙에 많아서 말이죠..^^ 말씀해주신 방식을 각각 A, B 타입으로 만들고, B타입을 Procedure로 Call 하는 방식을 추가하여 C 타입으로 정의했습니다. 1천만번 insert를 수행한 결과입니다. 총 5회 반복해 봤습니다. type A, elapsed in sec:1.22681713104 type B, elapsed in sec:1.25710010529 type C, elapsed in sec:1.20401906967 type A, elapsed in sec:1.16981101036 type B, elapsed in sec:1.19131684303 type C, elapsed in sec:1.16531610489 type A, elapsed in sec:1.19676685333 type B, elapsed in sec:1.21020293236 type C, elapsed in sec:1.24830794334 type A, elapsed in sec:1.21632313728 type B, elapsed in sec:1.20139884949 type C, elapsed in sec:1.1804921627 type A, elapsed in sec:1.22872281075 type B, elapsed in sec:1.21557283401 type C, elapsed in sec:1.21722197533 결론은 [별 차이 없다]입니다. 환경은 Debian Linux, MySQL 5.0.32-Debian_7etch5-log, MyISAM 테이블 입니다. 아래는 테스트에 사용된 PHP소스입니다.
function test_a() { mysql_query( 'TRUNCATE TABLE `test`' );
$start = microtime(true); for( $i = 0; $i < 10000000; ++$i ); mysql_query( "INSERT INTO `test` SET a=$i, b=$i, c=$i" ); $end = microtime(true);
echo( 'type A, elapsed in sec:'.($end-$start)."\n" ); }
function test_b() { mysql_query( 'TRUNCATE TABLE `test`' );
$start = microtime(true); for( $i = 0; $i < 10000000; ++$i ); mysql_query( "INSERT INTO `test` ( a,b,c ) VALUES ( $i,$i,$i )" ); $end = microtime(true);
echo( 'type B, elapsed in sec:'.($end-$start)."\n" ); } function test_c() { mysql_query( 'TRUNCATE TABLE `test`' );
$start = microtime(true); for( $i = 0; $i < 10000000; ++$i ); mysql_query( "CALL sp_InsertTest( $i,$i,$i )" ); $end = microtime(true);
echo( 'type C, elapsed in sec:'.($end-$start)."\n" ); }