За последние 24 часа нас посетил 17691 программист и 1280 роботов. Сейчас ищут 1437 программистов ...

Оптимизация запроса

Тема в разделе "PHP и базы данных", создана пользователем -Tom-, 18 окт 2006.

  1. -Tom-

    -Tom- Активный пользователь

    С нами с:
    18 окт 2006
    Сообщения:
    7
    Симпатии:
    0
    Господа буду благодарен за помощь.

    Вот схема Mysql.
    Код (Text):
    1. -- TABLE `post` (
    2.   `ID` mediumint(9) NOT NULL auto_increment,
    3.   `CAT_ID` mediumint(9) NOT NULL,
    4.   `TITLE` varchar(255) NOT NULL,
    5.   `TEXT` mediumtext NOT NULL,
    6.   `TOPIC_ID` mediumint(9) default '0',
    7.   PRIMARY KEY  (`ID`),
    8.   UNIQUE KEY `ID` (`ID`)
    9. ) ;
    10.  
    11. # --------------------------------------------------------
    12.  
    13.  
    14. -- TABLE `topic` (
    15.   `ID` mediumint(9) NOT NULL auto_increment,
    16.   `CAT_ID` mediumint(9) NOT NULL,
    17.   `TITLE` varchar(255) NOT NULL,
    18.    PRIMARY KEY  (`ID`),
    19.   UNIQUE KEY `ID` (`ID`)
    20. )  ;
    Вот запрос
    Код (Text):
    1. $sql="SELECT ,p.ID, p.TOPIC_ID, t.ID FROM
    2. $TABLE_FORUM_POST p, $TABLE_FORUM_TOPIC t
    3. WHERE
    4. $SEARCH_QUERY
    5. AND
    6. p.TOPIC_ID=t.ID
    7. GROUP BY p.TOPIC_ID
    8. ORDER BY p.ID DESC
    9. LIMIT $SEARCH_RESULTS_MAX_NUM";
    Вся проблема в GROUP BY p.TOPIC_ID тормозит не много уже на 400.000 записей.
    Без него 0.2 сек с ним 1.3 сек
    Ищу я по 2-м таблицам постам и по топикам, но выдать в итоге я должен топики. и они должны быть отсортированны

    На что этот запрос можно заменить, или как вообще оптимизировать этот запрос. Пробовал ставить вложености запросов, время тоже самое.

    Спасибо.
     
  2. Anonymous

    Anonymous Guest

    Проиндксируйте поле TOPIC_ID - значительно ускорит работу...
    Вообще, у меня личное правило (я именую столбики таким же образом) если имя столбика заканчивается на ID - он 100% должен быть проиндексирован.
     
  3. -Tom-

    -Tom- Активный пользователь

    С нами с:
    18 окт 2006
    Сообщения:
    7
    Симпатии:
    0
    Спасибо за подсказку :)
    Значит так, проиндексировал, скрипт стал в общем работать быстрее, но сам поиск стал 2х медленее, тот есть сейчас тоже самое поискать занимает уже 3.6 сек...

    Не чего не понимаю. как такое может быть...
     
  4. Anonymous

    Anonymous Guest

    Мммм... запрос попродробней не приведете, может что подскажу? И задачу поподробней, если можно =)