Перейти к содержимому
Русский язык для Invision Community 5

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

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

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

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

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

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

  • Автор

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

 

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

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

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

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

  • Автор

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

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

  • Автор
потому что там есть другие индексы.

Вообще-то есть один индекс (составной) с участием поля (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'] ) );
               }
       }

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

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.