PHP: количество запросов превышает максимальное время - PullRequest
0 голосов
/ 01 июня 2011

Хорошо. Я наконец написал мой запрос для моего php-файла (который запишет запрос в текстовый файл). Однако, когда я тестировал файл ранее, я явно превышал максимальное время выполнения. Я использовал только один большой запрос для выполнения работы, но теперь мне интересно, будет ли лучше использовать несколько небольших запросов. Будет ли это сокращать время выполнения?

Если бы это было так, тогда у меня есть еще один вопрос ко всем вам, как бы я поступил по этому поводу? Это основная часть моего файла:

// Query the database for data
$query = "SELECT 
  cards.card_id, 
  concat(cards.title, ' By Amy') AS cardTitle, 
  cards.meta_description,
  cards.description, 
  '' as Weight,
  '' as UPC,
  cards.seo_keywords,
  concat('http://www.amyadele.com/attachments//cards/',cards.card_id,'/',cards.card_image) AS ImageURL,
  card_import.artist,
  concat('ARTIST - ', card_import.artist) AS Brand,
  min(card_lookup_values.card_price) AS LowPrice,
 replace(lower(concat( 'http://www.amyadele.com/', pcat.seoname,'/',cat.seoname, '/', cards.seoname, '.htm' )),' ','+') AS link,
            concat(pcat.name,'>',cat.name) as Merchant,
 round(min(card_lookup_values.card_price), 2) AS newPrice,
 min(cast(lookup_details.value as signed)) as quantity

FROM
  cards
INNER JOIN card_cheapest on cards.card_id = card_cheapest.card_id
LEFT JOIN card_import on card_import.card_id = cards.card_id
INNER JOIN card_lookup_values on card_lookup_values.card_id = cards.card_id
INNER JOIN card_categories cc ON cards.card_id = cc.card_id AND cards.card_live = 'y' AND cards.active = 'y' AND cc.active = 'Y'
INNER JOIN categories cat ON cat.category_id = cc.category_id AND cat.active = 'Y'
INNER JOIN categories pcat ON cat.parent_category_id = pcat.category_id
INNER JOIN card_lookup_values as card_values ON cards.card_id = card_values.card_id
INNER JOIN lookup_details ON card_lookup_values.lookup_detail_id = lookup_details.lookup_detail_id

WHERE card_lookup_values.lookup_id = 7
GROUP BY
  cards.card_id
ORDER BY
  cards.card_id";


$result = mysql_query($query);


// Open file for writing
$myFile = "google.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

// Loop through returned data and write (append) directly to file
fprintf($fh, "%-25s %-200 \n", "ID", "Name");

fprintf($fh, "\n");
while ($row = mysql_fetch_assoc($result)) {

 fprintf($fh, "%-25s %-200s \n", $row['card_id'], $row['cardTitle']);

 }

// Close out the file
fclose($fh);

echo "The file has been written sucessfully to googleproducts.txt. It will run again tomorrow at 12:00pm."
?>

Как видите, я добавляю $ query в $ results и затем использую его для вставки в $ row. Полагаю, мой реальный вопрос (если возможно): как мне получить $ query, $ query2 и вставить $ query2 в то же самое выражение while?

Ответы [ 2 ]

4 голосов
/ 01 июня 2011

Многократные запросы, если что-нибудь, просто замедляют работу. Это означает компиляцию / выполнение нескольких запросов, так что вы получите больше накладных расходов. Используйте explain в своем запросе, чтобы увидеть, какие индексы используются (и не используются), и добавьте дополнительные индексы, где это необходимо. А в некоторых случаях все будет естественно медленно. В конце концов, вы делаете 8-стороннее соединение на 7 столах.

Очевидные места для проверки использования индекса: каждое поле в предложениях where и join.

1 голос
/ 01 июня 2011

вы можете изменить директиву max_execution_time в вашем php ini

или добавить ее в начало вашего скрипта

set_time_limit ( 0 );

ноль неограничен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...