728x90
반응형
type 1. 데이터 유형이 BIGINT인 경우
type 2. 데이터 유형이 DATETIME인 경우
상황은 다음과 같다.
type 1.의 경우 4개의 키가 존재하는데 각각의 키는 TagId(INT), DateTime(DATETIME), Quality(SMALLINT), Value(BIGINT)
type 2.의 경우 TagId(INT), Timestamp(BIGINT), Quality(SMALLINT), Value(BIGINT)
20만개의 데이터를 50개씩 멀티쿼리를 통해 DB에 들어가는 시간을 파악한다.
각각의 코드는 다음과 같다.
type 1.
// 10만개 50개씩 멀티쿼리로 Timestamp BIGINT 시간 측정
void MySqlTestQuery1()
{
// Initialize mysql to insert data
m_pMySql = mysql_init(NULL);
if (m_pMySql == NULL)
return;
// Connect to the mysql server
if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "root", "datamon", 3306, NULL, 0) == NULL)
//if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "dcgoodman", "DGTC", 3306, NULL, 0) == NULL)
{
CStringA str = mysql_error(m_pMySql);
mysql_close(m_pMySql);
m_pMySql = NULL;
return;
}
char szStmt[65536];
int nPos;
INT64 nTime = 0;
SYSTEMTIME st;
::GetSystemTimeAsFileTime((FILETIME*)&nTime);
printf("Start Insertion\\n");
DWORD dwTick = ::GetTickCount();
for (int i = 0; i < 200000; i += 50)
{
nPos = sprintf(szStmt, "INSERT INTO arcint (TagId, Timestamp, Quality, Value) VALUES ");
for (int j = 0; j < 50; j++)
{
nTime += 10000;
nPos += sprintf(szStmt + nPos, "(100, %I64d, %d, %d),",nTime, 192, j);
}
szStmt[nPos - 1] = 0;
ExecuteUpdate(szStmt);
}
DWORD dwTick2 = ::GetTickCount();
printf("Elapsed Time: %d\\n", dwTick2 - dwTick);
}
type 2.
// 10만개 50개씩 멀티쿼리로 DateTime 시간 측정
void MySqlTestQuery2()
{
// Initialize mysql to insert data
m_pMySql = mysql_init(NULL);
if (m_pMySql == NULL)
return;
// Connect to the mysql server
if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "root", "datamon", 3306, NULL, 0) == NULL)
//if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "dcgoodman", "DGTC", 3306, NULL, 0) == NULL)
{
CStringA str = mysql_error(m_pMySql);
mysql_close(m_pMySql);
m_pMySql = NULL;
return;
}
char szStmt[65536];
int nPos;
INT64 nTime = 0;
SYSTEMTIME st;
::GetSystemTimeAsFileTime((FILETIME*)&nTime);
printf("Start Insertion\\n");
DWORD dwTick = ::GetTickCount();
for (int i = 0; i < 200000; i += 50) {
nPos = sprintf(szStmt, "INSERT INTO testint (TagId, DateTime, Quality, Value) VALUES ");
for (int j = 0; j < 50; j++)
{
nTime += 10000;
::FileTimeToSystemTime((FILETIME*)&nTime, &st);
nPos += sprintf(szStmt + nPos, "(100, '%04d-%02d-%02d %02d:%02d:%02d.%03d', %d, %d),", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, 192, j);
}
szStmt[nPos-1] = 0;
ExecuteUpdate(szStmt);
}
DWORD dwTick2 = ::GetTickCount();
printf("Elapsed Time: %d\\n", dwTick2 - dwTick);
}
결과는 다음과 같다.
type 1.
type 2.
속도 성능면에서 3배정도 차이나는것을 파악할 수 있다.
728x90
반응형
'기타' 카테고리의 다른 글
[Data Scientist] 2024 하반기 현대캐피탈 과제 테스트 후기 (0) | 2024.10.27 |
---|---|
20대 후반 권고사직.. (0) | 2024.08.25 |
리틀앤디안 vs 빅앤디 (0) | 2023.12.12 |
Go-ethereum(geth) 투표 예제 (Windows) (0) | 2023.12.11 |
[빅데이터분석기사] 5회 기출 변형 (0) | 2023.12.02 |