Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
cyrax_02

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

Рекомендованные сообщения

06/11/15 11:23 (изменено)

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

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

Изменено пользователем cyrax_02

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
06/11/15 14:42 (изменено)

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

 

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

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

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

Изменено пользователем cyrax_02

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
06/11/15 21:15 (изменено)
потому что там есть другие индексы.

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

tag_aap_lookup + tag_text

 

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

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

 

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

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

Изменено пользователем cyrax_02

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Т.е. нужно задействовать этот самый (tag_aap_lookup). Похоже, это md5 от (tag_text). Завтра проверю...
Нет. Это не md5. Это хрен знает что.

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

admin/sources/classes/tags/abstract.php

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

 

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

Поделиться сообщением


Ссылка на сообщение
/**
        * 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'] ) );
               }
       }

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...