Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
cyrax_02

Поле (core_core_tags.tag_text) не имеет индекса...

Recommended Posts

Обнаружил, что по полю core_tags.tag_text нет индекса. Почему ?

Как IP.Board без индекса фильтрует темы по тегам ? Перебором/сравнением всех тегов из (core_tags) ?

Edited by cyrax_02

Share this post


Link to post

Там все намного сложнее, tag_text не единственное условие по которому выбираются теги.

Share this post


Link to post

В собственном коде я выбираю темы по тегам. Запрос выполняется медленно из-за отсутствия сабжевого индекса.

 

Добавить индекс не проблема, но:

1) замедлятся запросы на создание новых тем

2) после каждого обновления движка придётся следить, чтобы этот самый индекс не был удалён

Edited by cyrax_02

Share this post


Link to post

siv1987, не могли бы вы удалить префикс таблицы из заголовка темы ?

Share this post


Link to post

Включите лог медленных запросов или в initdata.php включить дебаг sql запросов, на странице выбора тегов добавьте ?debug=1 и смотрите за какое время он выполняется. Мне кажется что добавления индекса может и не помочь, потому что там есть другие индексы.

Share this post


Link to post
потому что там есть другие индексы.

Вообще-то есть один индекс (составной) с участием поля (tag_id):

tag_aap_lookup + tag_text

 

Т.е. нужно задействовать этот самый (tag_aap_lookup). Похоже, это md5 от (tag_text). Завтра проверю...

Если действительно так, то в собственном запросе вместо искомых значений тегов нужно искать их md5-эквиваленты по полю (tag_aap_lookup)

 

Мне кажется что добавления индекса может и не помочь

Должен. Поскольку (tag_text) в вышеуказанном индексе находится на второй позиции => при поиске по полю (tag_text) этот индекс не используется. Именно так и было в моём запросе (проверял EXPLAIN'ом - имел место перебор всех записей в таблице тегов)

Edited by cyrax_02

Share this post


Link to post

Нет. Это не md5. Это хрен знает что.

Нужно колдовать с полем (tag_perm_aai_lookup). По нему есть индекс и он, похоже, каким-то чудесным образом связан с полем (tag_text).

 

Пока оставим сабж до конца лета...

Share this post


Link to post
Т.е. нужно задействовать этот самый (tag_aap_lookup). Похоже, это md5 от (tag_text). Завтра проверю...
Нет. Это не md5. Это хрен знает что.

Так, может, не стоит гадать, а взглянуть внутрь...

admin/sources/classes/tags/abstract.php

	/**
 * Build a key
 */
private function _getKey( $where )

 

Также есть методы для работы с тегами (поиска, добавления, замены, удаления и др.)

Share this post


Link to post
/**
        * Build a key
        */
       private function _getKey( $where )
       {
               $where = $this->_cleanWhere( $where );

               if ( isset( $where['meta_id'] ) )
               {
                       return md5( $this->getApp() . ';' . $this->getArea() . ';' . intval( $where['meta_id'] ) );
               }
               else if ( isset( $where['meta_parent_id'] ) )
               {
                       return md5( $this->getApp() . ':' . $this->getArea() . ':' . intval( $where['meta_parent_id'] ) );
               }
       }

Share this post


Link to post

Не все так просто там как казалось бы - выбор только по тегу и все. Условий там несколько, индексов несколько, а значит оптимизатор выберет один индекс для поиска.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...