Тема: Нужны гуру в MySQL - надо пару запросов оптимизировать
Хелп
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
Ви не увійшли. Будь-ласка, увійдіть або зареєструйтесь.
Нагадування любителям зареєструватися та відразу лізти у розділ "Продаж"!!! Ваш аккаунт будет одразу видалено !!! Читайте Правила ! |
Анкета, правила та реквізити Про політику на форумі |
|
Logan-Клуб в Україні (Logan-Club in Ukraine) → Форум та його мешканці → Нужны гуру в MySQL - надо пару запросов оптимизировать
Сторінки 1
Щоб відправити відповідь, Ви повинні Увійти або Зареєструватись
Хелп
эээ.... я бы не сказал, что я гуру.... но посмотреть попробую... шли мылом
Спасибо. Сейчас подготовлю тексты и пришлю.
вопчем.... объединить те два запроса можно, но не факт что это будет эффективнее... для начала посмотри есть ли в базе следующие индексы по полям
topics: forum_id
topics: moved_to
topics: sticky
topics: last_post
forum_perms: forum_id,group_id
forum_perms: read_forum
если нет, то не плохо бы создать -- должно скорость увеличить...
/*Index Information For - .topics*/
--------------------------------------------------
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
------ ---------- ------------------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- -------
topics 0 PRIMARY 1 id A 2601 (NULL) (NULL) BTREE
topics 1 topics_forum_id_idx 1 forum_id A 28 (NULL) (NULL) BTREE
topics 1 topics_moved_to_idx 1 moved_to A 2601 (NULL) (NULL) YES BTREE
/*Index Information For - .forum_perms*/
-------------------------------------------------------
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
----------- ---------- -------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- -------
forum_perms 0 PRIMARY 1 group_id A (NULL) (NULL) (NULL) BTREE
forum_perms 0 PRIMARY 2 forum_id A 114 (NULL) (NULL) BTREE
Напомни, плиз, синтаксис - как правильно создать индекс
Если еще актуально - могу подключиться к процессу...
Та мы только начали
Сейчас тебе письмо напишу - глянешь, что там
P.S. решил сюда код запостить:
Это код модуля активные и выделенные темы.
<?php
/*
PunBB Active Topics Lite by aFeLiOn
Based on "Mod Active Topics" of Alex King, http://www.alexking.org/
This is a mod for PunBB, http://www.punbb.org/
PunBB is Copyright (C) 2005 Rickard Andersson (rickard@punbb.org)
-------------------------------
To install, include this file below the forums list in your index.php file:
include('mod_active_topics.php');
(Before line: '$result = $db->query('SELECT c.id AS cid...' or anywhere you want)
*/
$active_topic_limit = 20; // change this to the number of active topics you want to display.
$result = $db->query('SELECT t.* FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL AND t.sticky=0 AND f.id<>16 ORDER BY t.last_post DESC LIMIT '.$active_topic_limit) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
//$i=1;
require PUN_ROOT.'lang/'.$pun_user['language'].'/forum.php';
?>
<div id="vf" class="blocktable">
<h2><span>Активные и выделенные темы форума </span></h2>
<div class="box">
<div class="inbox">
<table cellspacing="0">
<tbody>
<?php
// If there are topics in this forum.
if ($db->num_rows($result))
{
//echo '<tr><td class="tcl">';
echo '<tr><td>';
?>
<div style="height: 150px; overflow: auto;">
<?php
while ($cur_topic = $db->fetch_assoc($result))
{
// if ($i==11)
// echo '<td>';
$item_status = '';
if ($pun_config['o_censoring'] == '1')
$cur_topic['subject'] = censor_words($cur_topic['subject']);
$last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
if (!$pun_user['is_guest'] && $cur_topic['last_post'] > $pun_user['last_visit'])
{
$item_status .= ' inew';
$last_post = '<strong>'.$last_post.'</strong>';
}
// if ($cur_topic['sticky'] == '1')
// {
// $last_post = '<span class="stickytext">'.$lang_forum['Sticky'].': </span>'.$last_post;
// $item_status .= ' isticky';
// }
// i=$i+1;
?>
<div<?php if ($item_status != '') echo ' class="'.trim($item_status).'1"'; ?>>
<div class="intd">
<div class="tclcon">
<?php
echo '<font color="#FF9900"><strong>›</strong></font> '.$last_post.' <span class="byuser">» '.pun_htmlspecialchars($cur_topic['last_poster']).' » '.$lang_common['Replies'].': '.$cur_topic['num_replies'].' » '.$lang_forum['Views'].': '.$cur_topic['num_views'].'</span>';
?>
</div>
</div>
</div>
<?php
}
echo '<td><div style="height: 150px; overflow: auto;">';
$active_topic_limit = 20; // change this to the number of active topics you want to display.
$result = $db->query('SELECT t.* FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL AND t.sticky=1 ORDER BY t.last_post DESC LIMIT '.$active_topic_limit) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
while ($cur_topic = $db->fetch_assoc($result))
{
// if ($i==11)
// echo '<td>';
$item_status = '';
if ($pun_config['o_censoring'] == '1')
$cur_topic['subject'] = censor_words($cur_topic['subject']);
$last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
if (!$pun_user['is_guest'] && $cur_topic['last_post'] > $pun_user['last_visit'])
{
$item_status .= ' inew';
$last_post = '<strong>'.$last_post.'</strong>';
}
// if ($cur_topic['sticky'] == '1')
// {
// $last_post = '<span class="stickytext">'.$lang_forum['Sticky'].': </span>'.$last_post;
// $item_status .= ' isticky';
// }
// $i=$i+1;
?>
<div<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>>
<div class="intd">
<div class="tclcon">
<?php
echo '<font color="#FF9900"><strong>›</strong></font> '.$last_post.' <span class="byuser">» '.pun_htmlspecialchars($cur_topic['last_poster']).' » '.$lang_common['Replies'].': '.$cur_topic['num_replies'].' » '.$lang_forum['Views'].': '.$cur_topic['num_views'].'</span>';
?>
</div>
</div>
</div>
<?php
}
echo '</td></tr></div></div>';
}
else
{
?>
<tr>
<td class="tcl" colspan="4"><?php echo '*EMPTY*' ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
Тут два запроса достаточно долго выполняются (относительно остальных). Вот и вопрос - можно ли их объединить в один
ALTER TABLE `topics` ADD INDEX (`sticky`)
ALTER TABLE `topics` ADD INDEX (`last_post`)
ALTER TABLE `forum_perms` ADD INDEX (`forum_id`,`group_id`)
ALTER TABLE `forum_perms` ADD INDEX (`read_forum`)
попробуй добавить эти (3-й тоже.... т.к. нам надо двойной)
Pashka R.
Ок. Попробую.
Zevs
потом, если чё, можно объединить запрос в один -- в таком случае, правда, далеко не факт, что возрастёт скорость
Pashka R.
Индексы добавил - жду дальнейших указаний !
Zevs
А как по скорости? Изменения появились?
Pashka R.
Особых не заметил
Больше всего "жрут" запросы Активных тем (код выше) и еще один (но там я знаю, где можно "крутануть").
Ну и Чат (но это на закуску)
Zevs
А есть ли смысл в этом чате? может irc поднять? я так понимаю, что со стороны хостера проблем не будет?... так вот.... поднять ирку + для тех, кому на сайте поиграться, я думаю можно прикрутить клиента на яве... да и от irc я думаю толку больше будет, чем от этой поделки....
Pashka R.
Сейчас главное попробовать мод активных тем на один запрос перевести и посмотреть, получится выигрыш или нет.
Чат пока в бэкграунде нормально живет вроде.
ок.... тот скрипт поправлю -- пришлю
Жду. Я туточки вчера поправил один запрос - а то там SUM() каждый раз использовался.
Никаких подвижек нету пока ?
Подниму тему - вопрос до сих пор актуален
Сторінки 1
Щоб відправити відповідь, Ви повинні Увійти або Зареєструватись
Logan-Клуб в Україні (Logan-Club in Ukraine) → Форум та його мешканці → Нужны гуру в MySQL - надо пару запросов оптимизировать
Згенеровано за 0.172 секунд(и), виконано 93 запитів