database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29367 게시물 읽기
No. 29367
insert 문에 대한 질문...
작성자
구자범(9jabum)
작성일
2009-10-21 14:01
조회수
5,820

제가 insert query작성시...


insert into db_table SET field1 = '1', field2 = '2', field3 = '3';


이런식으로 작성을 합니다.


이런식의 작성이 기본적인 사용문인


insert into db_table (field1, field2, field3) values ('1', '2', '3');


보다 속도가 늦을까요?


아니면 둘 다 차이가 없을까요?

이 글에 대한 댓글이 총 1건 있습니다.

이런건 그냥 해보는게 나은 거 같습니다. 예측 불가능한 요소들이 워낙에 많아서 말이죠..^^

말씀해주신 방식을 각각 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소스입니다.


test_a();
test_b();
test_c();

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" );
}

박현우(lqez)님이 2009-10-21 21:28에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29372두개의 테이블의 합계를 조인으로 구하는데 중복됩니다. 도와주세요 [2]
김명현
2009-10-24
5734
2936930분 단위로 통계를 낼수 있는 방법에 대해 문의합니다. [1]
초보자
2009-10-21
8702
29368innodb에서 varchar 길이선택과 성능? [3]
이왕태
2009-10-21
6852
29367insert 문에 대한 질문... [1]
구자범
2009-10-21
5820
29366검색시 빠른 것은 인덱스는? [4]
김명수
2009-10-21
6427
29365group by로 최댓값 구하는방법? [1]
ㅇㅇ
2009-10-20
6312
29364함수 질문 드립니다.
김지현
2009-10-20
5782
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다