1

Тема: Нужны гуру в MySQL - надо пару запросов оптимизировать

Хелп   kapitulation

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0



2

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

эээ.... я бы не сказал, что я гуру.... но посмотреть попробую... шли мылом smile

Logan laureate 1.6 / серебро
  0

3

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Спасибо. Сейчас подготовлю тексты и пришлю.  storstark

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

4

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

вопчем.... объединить те два запроса можно, но не факт что это будет эффективнее... для начала посмотри есть ли в базе следующие индексы по полям

topics: forum_id
topics: moved_to
topics: sticky
topics: last_post
forum_perms: forum_id,group_id
forum_perms: read_forum

если нет, то не плохо бы создать -- должно скорость увеличить...

Logan laureate 1.6 / серебро
  0

5

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

/*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

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

6

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Напомни, плиз, синтаксис  - как правильно создать индекс

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

7

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Если еще актуально - могу подключиться к процессу...

  0

8

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Та мы только начали  dumbom
Сейчас тебе письмо напишу - глянешь, что там

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>&rsaquo;</strong></font> '.$last_post.' <span class="byuser">&raquo; '.pun_htmlspecialchars($cur_topic['last_poster']).' &raquo; '.$lang_common['Replies'].': '.$cur_topic['num_replies'].' &raquo; '.$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>&rsaquo;</strong></font> '.$last_post.' <span class="byuser">&raquo; '.pun_htmlspecialchars($cur_topic['last_poster']).' &raquo; '.$lang_common['Replies'].': '.$cur_topic['num_replies'].' &raquo; '.$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>

Тут два запроса достаточно долго выполняются (относительно остальных). Вот и вопрос - можно ли их объединить в один

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

9

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

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-й тоже.... т.к. нам надо двойной)

Logan laureate 1.6 / серебро
  0

10

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Pashka R.

Ок. Попробую.

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

11

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Zevs

потом, если чё, можно объединить запрос в один -- в таком случае, правда, далеко не факт, что возрастёт скорость

Logan laureate 1.6 / серебро
  0

12

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Pashka R.

Индексы добавил - жду дальнейших указаний !  kapitulation

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

13

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Zevs
А как по скорости? Изменения появились?

Logan laureate 1.6 / серебро
  0

14

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Pashka R.

Особых не заметил  dntknw
Больше всего "жрут" запросы Активных тем (код выше) и еще один (но там я знаю, где можно "крутануть").
Ну и Чат (но это на закуску)

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

15

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Zevs
А есть ли смысл в этом чате? может irc поднять? я так понимаю, что со стороны хостера проблем не будет?... так вот.... поднять ирку + для тех, кому на сайте поиграться, я думаю можно прикрутить клиента на яве... да и от irc я думаю толку больше будет, чем от этой поделки....   empathy

Logan laureate 1.6 / серебро
  0

16

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Pashka R.

Сейчас главное попробовать мод активных тем на один запрос перевести и посмотреть, получится выигрыш или нет.
Чат пока в бэкграунде нормально живет вроде.

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

17

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

ок.... тот скрипт поправлю -- пришлю

Logan laureate 1.6 / серебро
  0

18

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Жду. Я туточки вчера поправил один запрос - а то там SUM() каждый раз использовался.

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

19

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

kapitulation

Никаких подвижек нету пока ?

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0

20

Re: Нужны гуру в MySQL - надо пару запросов оптимизировать

Подниму тему - вопрос до сих пор актуален  kapitulation

Счастье, это когда тебе все завидуют, а нагадить не могут !!!
FAQ по Dacia Logan (MCV) и по форуму
Как загрузить картинки на форум
Hyundai Accent 2007 1.6 AT
  0