환경: winxp sp2, mysql5.0.18, mysqlodbc 3.51 드라이버 테이블은 myisam 엔진을 사용합니다. 액세스 2003
다른 장소:
1. 데이터를 삽입할 때 mysql은 insert into 문을 사용하고 rs.addnew를 사용하지 않아야 합니다. 꼭 사용해야 하는 경우 conn.CursorLocation=3을 먼저 설정해야 하며 그렇지 않으면 오류가 발생합니다. insert를 사용하는 것이 addnew보다 약 3배 더 빠르다는 것을 알았습니다. 또한 rs.update시 rs.addnew를 사용하면 접근시 rs(id) 값을 바로 얻을 수 없습니다.
2. 액세스 비교:
동일한 테이블 구조로 insert를 사용하여 20,000개의 데이터를 삽입하면 MySQL은 7.5초가 걸리고, rs.addnew를 사용하면 24초가 걸립니다! 액세스 시 insert 사용에는 19.8초가 걸렸지만 rs.addnew 사용에는 2.8초밖에 걸리지 않았습니다!
쿼리 비교: 40만 개의 데이터에 대한 액세스 쿼리는 12초가 걸렸고, MySQL 쿼리는 14초가 소요되어 약간 느립니다.
요약: 일반적으로 access의 삽입 속도는 mysql의 삽입 속도보다 약 3배 정도 빠릅니다. 데이터를 쿼리할 때, 데이터의 양이 상대적으로 적을 경우에는 mysql에 비해 접속 속도가 약 2배 빠르지만, 데이터의 양이 많을 경우에는 mysql의 쿼리 속도는 크게 변하지 않지만, 접속 속도는 크게 떨어진다.
물론 mysql은 access보다 더 빨라야 합니다. 문제는 odbc 드라이버에 있고 액세스 드라이버는 ole을 사용하고 있기 때문에 이 테스트에서는 mysql이 잘못되었습니다! 동시성 성능은 테스트해보진 않았지만 mysql보다 접근성이 훨씬 나쁠 것 같아요.
사용하고 싶다면
RS.페이지수
rs.페이지 크기
rs.AbsolutePage
rs.레코드카운트
이러한 속성의 경우 먼저 conn.CursorLocation=3을 수행해야 합니다.
그렇지 않으면 위의 속성 중 어느 것도 사용할 수 없습니다.
또한 잘못된 문자 및 중국어 오류가 삽입되는 것을 방지하려면 conn.open 바로 뒤에 다음을 수행해야 합니다. conn.Execute (SET NAMES 'gb2312')
그렇지 않으면 삽입 오류가 발생하고 코드가 깨질 것입니다.
연결 방법:
'시스템 DNS를 사용하여 연결:
strconnection=dsn=mysql; OPTION=16384;driver={mysql odbc 3.51 드라이버};server=127.0.0.1;uid=root;pwd=67918;database=test
'문자열과 직접 연결:
'strconnection={mysql odbc 3.51 드라이버}; 포트=3306; 소켓=; Uid=67918; 옵션=16384
conn=server.createobject(adodb.connection) 설정
conn.CursorLocation=3
conn.open 문자열 연결