簡體   English   中英

如何提高數百個類似的MySQL查詢的效率?

[英]How can I make hundreds of similar MySQL queries more efficient?

我有一系列有關在PHP腳本的網頁上找到的鏈接的信息。

每個鏈接都需要插入到MySQL myisam表中。

現在,我遍歷數組並為每個鏈接運行一個插入查詢。

有沒有更合適的方法可以做到這一點,以便更有效地使用MySQL?

您可以使用一條語句插入幾條記錄:

<?php

//  Our MySQL query

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );

?>

資料來源: http : //www.desilva.biz/mysql/insert.html

您可以使用以下語法在單個語句中插入多個值:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

參見MySQL手冊的12.2.5節

如果MySQL服務器與PHP服務器位於不同的主機上,則這是特別可取的:在上面的示例中,您只需要一次網絡往返,而不是三個。

如果網絡延遲不是問題(如果MySQL服務器與PHP在同一台服務器上運行),請使用如下准備的語句:

$dbh = new PDO("mysql:host=127.0.0.1;port=3306;dbname=test", "root", "");

$sth = $dbh->prepare("INSERT INTO links(title, href) VALUES(:title, :href);");

while ($link = getNextLink()) {
    $sth->execute( array( "title" => $link->title, "href" => $link->href ) );
}

重復執行時,准備好的語句會稍快一些,因為MySQL服務器必須解析SQL並僅運行一次查詢計划程序/優化程序。

如果表中有索引,則可以在插入之前將其禁用,並在插入后再次啟用它們,這將加快插入行的速度,因為不必在每次插入后都更新索引(僅適用於MyISAM,請參見第12.1.7節)。 Mysql手冊 ):

ALTER TABLE links DISABLE KEYS
-- insert rows
ALTER TABLE links ENABLE KEYS

對於每個循環,一會兒或一會兒就足夠了,我會考慮到這一點,因為信息會很大,而且我想它是動態的。

您可以使用一個查詢,但是如果您有成百上千的信息,或者如果要不斷用新數據更新數據庫,則最好使用每個循環或while循環的數組。 如果僅需幾條信息就可以解決問題,請按照以下步驟自行寫出QUERY

mysql_query(“ INSERT INTO table(column1,column2)VALUES('VALUE','VALUE'),('VALUE','VALUE')”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM