2011-12-14 84 views
2

我試圖強調我的應用程序以查看mysql查詢是否可用於一大組記錄。php + mysql用增量ID和不同值插入許多行

很多開發者,我寫了有一個小範圍的記錄,並添加他們夫婦在開發階段的PHP/MySQL的應用程序。 現在,我想知道如果我的表中有10000行或50000行,怎麼會工作(慢,正常還是快)。當然,所有的數據是在很多表(客戶,聯繫人,訂單,產品,推車等)

要做到這一點,我將需要複製增量ID和不同值的行。

現在,我知道這是不可能的要求寫了我所有的表或數據庫結構查詢的話,我的問題是:

我怎樣才能插入一個MySQL表增量ID和不同的價值觀多行?可以是SQL樣式或PHP代碼,因爲它可以執行。

CREATE TABLE `customers` (
    `ID_Customer` int(11) unsigned NOT NULL auto_increment, 
    `Name` varchar(50) character set latin1 default NULL, 
    `Address` varchar(100) character set latin1 default NULL, 
    `City` varchar(50) character set latin1 default NULL, 
    `Zip` varchar(15) character set latin1 default NULL, 
    `ID_Country_Subdivision_ISO_Code` char(3) character set latin1 default NULL, 
    `ID_Country_ISO_Code` char(2) character set latin1 default NULL, 
    PRIMARY KEY (`ID_Customer`) 
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; 


INSERT INTO `customers` VALUES ('9', 'Bernard Dusablon', '8-125 103 E Avenue', 'St-Jérôme', 'J7Y 3Z6', 'QC', 'CA'); 
INSERT INTO `customers` VALUES ('10', 'Nicolas Gilbert', '9-125 103 E Avenue', 'Montréal', 'H7C 1T5', 'QC', 'CA'); 

非常感謝

+0

我不明白。你問如何插入和自動增加值是不同的? – 2011-12-14 17:10:33

回答

2

查看Generate Data,從那裏生成至少500k行結果並將它們插入到數據庫中。

我建議至少500K,因爲小於,你甚至不會能感受到不索引的查詢和類似的東西。如果你只是對10k進行測試,所有查詢都會閃電般快(索引或不索引)。

使用之後,應進行壓力測試您的網站都:

Apache ab - 這將使加載到你的服務器(和DB)
MysqlSlap - 這將使負載的數據庫

上如果再碰巧遇到任何單個查詢時遇到麻煩,請查看MySQL所擁有的EXPLAIN命令。它會查明你的問題在哪裏。

+0

我喜歡這種方法。我會盡力這樣做,至少對於generatedata.com –

+1

generatedata.com太棒了!感謝這一點。 –

0

只寫一個隨機PHP腳本來火了一個INSERT語句。不要在插入中包含ID_CUSTOMER字段,SQL Server會照顧到這一點。

0

嘗試像在PHP

$max_stress_test = 100; 
for(i=0;i<=$max_stress_test;i++) 
{ 
    $query = 'INSERT INTO `customers` (Name, Address, Zip, ID_Country_Subdivision_ISO_Code, ID_Country_ISO_Code) VALUES ('Bernard Dusablon', '8-125 103 E Avenue', 'St-Jérôme', 'J7Y 3Z6', 'QC', 'CA');' 

    $result = mysql_query($query) or die(mysql_error()); 
} 

它會循環,並添加行到表中,直到它達到100 ID_Customer會自動上浮。

我確定有壓力測試工具可以使用。

+0

我同意但我需要隨機化數據。 –

1

由於OldCode101暗示,你並不需要包括你的「ID_Customer」字段,當你插入。如果排除它,則auto_increment生效,MySQL服務器負責分配一個新的唯一值。如果您需要使用該值,則可以使用PHP中的mysql_insert_id()函數。

這回答了「我如何使用auto_increment」問題。

與許多行壓力測試數據庫,你應該搞清楚,你認爲可能會頻繁地進行查詢,然後一次用不同的號碼儲存在數據庫中的行查詢。

$q_insert = "INSERT INTO customers (Name, Zip) VALUES ('%s', '%s')"; 
$q_test = "SELECT COUNT(*) FROM customers WHERE ZIP LIKE '%s')"; 

$i = 0; 
while ($i++ < 10) { 
    $n = 0; 
    for ($n=0; $n<10000; $n++) { 
    $randomname = substr(md5(time()),0,rand(5,10)) ." ". substr(md5(time()),10,rand(5,10)); 
    mysql_query(sprintf($q_insert, $randomname, rand(10000,99999))); 
    } 
    $starttime=microtime(1); 
    mysql_query(sprintf($q_test, rand(1,9))); 
    printf("i=%s, duration=%.4f s\n", $i, microtime(1)-$starttime); 
} 

未經測試。因人而異。

+0

謝謝。這應該工作,但我更喜歡Frankie的懶惰解決方案。 Generatedata.com關於應用程序的壓力,我想到了同樣的事情。我有一個頁面上有一個繁重的sql事務(多個表上的多個查詢)。再次感謝。 –