* 당신은 당신이 결국 내 질문을 찾을 수있는 설명을 읽어 게으른 경우 ...MySQL의 삽입 성능 stressTool
안녕, 나는 간단한 데이터베이스 구축 : 이제 내가
CREATE TABLE `users` (
`id` varchar(45) NOT NULL,
`full_name` varchar(45) NOT NULL,
`first_name` varchar(45) NOT NULL,
`last_nmae` varchar(45) NOT NULL,
`login` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
PRIMARY KEY (`id`,`full_name`,`login`),
UNIQUE KEY `idusers_UNIQUE` (`id`),
UNIQUE KEY `login_UNIQUE` (`login`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
을 단일 행 삽입의 성능 테스트.
나는 C#으로 스트레스 도구를 만들고 1M 행으로 실행합니다. doJob() 메소드에서
abstract class Job
{
private static object synObject = new object();
private static int _id = 0;
private static DateTime startingTime = DateTime.Now;
private const int JOB_PER_SIRCLE = 10;
protected int id;
public Job()
{
lock (synObject)
{
_id++;
id = _id;
}
}
public void run()
{
while (true)
{
for (int i = 0; i < JOB_PER_SIRCLE; i++)
{
doJob();
}
lock (synObject)
{
calculate();
}
}
}
private static DateTime lastLog = DateTime.Now;
private static long numOfJobsAcomplished = 0;
private static long totalNumOfJobsAcomplished = 0;
private static void calculate()
{
totalNumOfJobsAcomplished += JOB_PER_SIRCLE;
numOfJobsAcomplished += JOB_PER_SIRCLE;
DateTime now = DateTime.Now;
TimeSpan timePass = now - lastLog;
if (timePass.TotalSeconds > 1)
{
double total = 1000000;
TimeSpan speed = TimeSpan.FromMilliseconds(timePass.TotalMilliseconds/numOfJobsAcomplished * total);
Console.WriteLine("Speed = " + String.Format("{0:00.0000}", speed.TotalMinutes) + " Completed " + String.Format("{0:00.000}", totalNumOfJobsAcomplished/total * 100) + "% time pass " + (now - startingTime));
lastLog = now;
numOfJobsAcomplished = 0;
}
}
protected abstract void doJob();
}
내가 삽입을하고있는 중이 야 내가 16 욥의, 16 개 스레드 (나는 내 컴퓨터에 최적의 성능을 것으로 나타났습니다) 실행하고 있습니다 : 당신이 관심이 있다면 이 코드입니다
어쨌든 제 질문은 결과에 관한 것입니다. 나는 85 만에서 105 분 사이에 1,000,000 개의 행을 삽입하려고합니다. 이 속도가 빠르거나 다른 데이터베이스를 사용해야합니까?
P.S * 나는 또한 내가 항상 누군가를 고려하여 다른 요인을 고려하지 않고 소프트웨어에 대한 "비난"쓰기 속도에 시도 재미 때 찾을 MD5Crypt 알고리즘
'이것이 빠릅니다'는 주관적입니다. 요구 사항 및/또는 제약 조건은 무엇입니까?로드 동작은 실제로 어떤 것입니까? 테이블에서 다른 읽기 또는 쓰기 활동은 어떻게됩니까? 또한 SQL 쿼리의 형식이 중요합니다. 매개 변수화 된 쿼리를 사용하여 네트워크 트래픽을 최소화하고 시간을 파싱하고 컴파일하는 등의 작업을 수행하고 있습니까? – MatBailie
@Dems "사용자 값 ('...')에 삽입;" –
매개 변수화 된 쿼리를 살펴보십시오. 동일한 쿼리를 반복해서 반복하면 더 빠르게 수행됩니다. – MatBailie