0
我有PHP腳本比較url到我們的db url並保存只有新的。問題是這個腳本的每一步都花費很長時間(總共超過10分鐘)。下面是步驟:非常緩慢的innodb操作
$query = sprintf("DELETE FROM %s ; ", $DB ['compare_result_table']);
$query = sprintf("LOAD DATA INFILE '%s' IGNORE INTO TABLE %s
FIELDS TERMINATED BY ','
ENCLOSED BY \"'\"
LINES TERMINATED BY '\n'
(domain, url_value)",
$real_out_path, $DB["compare_result_table"]);
$query = sprintf(" INSERT INTO %s SELECT domain
FROM %s ;", $DB ['compare_url_table'], 'domain_data');
$query = sprintf("DELETE a.*
FROM %s a INNER JOIN %s b using (domain);",
$DB["compare_result_table"], $DB ['compare_url_table']);
這裏的表格說明:
DROP TABLE IF EXISTS cmp_url;
CREATE TABLE cmp_url
(
domain varchar(255),
index (domain)
);
DROP TABLE IF EXISTS cmp_result;
CREATE TABLE cmp_result
(
domain varchar(255),
url_value varchar(4096),
index (domain)
);
每次我打電話SHOW PROCESSLIST我看到每一步(不包括文件,也許數據負載)正在很長。包含我們要比較的域的domain_data表現在是600 000條記錄。它變得越大,所有的步驟越慢。
下面是一些選項我在my.cnf改:
innodb_lock_wait_timeout = 360
innodb_autoinc_lock_mode=2
binlog_format=mixed
transaction-isolation = READ-COMMITTED
但它並沒有改變任何東西。我該如何解決這個問題?感謝您的時間。
你爲什麼用'INNER JOIN'刪除? – tadman
嘗試從PHP執行shell腳本到mysql服務器,比使用mysql連接器更快地執行shell腳本,考慮傳輸文件的時間太多,使用shell腳本傳輸通過網絡。 – randiel
我認爲這會比子查詢更快。或者我應該使用什麼方法。另外,刪除並插入到cmp_url表中花費很長時間。 –