Опубликовано: 11 июня 201510 г Обнаружил, что по полю core_tags.tag_text нет индекса. Почему ?Как IP.Board без индекса фильтрует темы по тегам ? Перебором/сравнением всех тегов из (core_tags) ? Изменено 11 июня 201510 г пользователем cyrax_02
Опубликовано: 11 июня 201510 г Там все намного сложнее, tag_text не единственное условие по которому выбираются теги.
Опубликовано: 11 июня 201510 г Автор В собственном коде я выбираю темы по тегам. Запрос выполняется медленно из-за отсутствия сабжевого индекса. Добавить индекс не проблема, но:1) замедлятся запросы на создание новых тем2) после каждого обновления движка придётся следить, чтобы этот самый индекс не был удалён Изменено 11 июня 201510 г пользователем cyrax_02
Опубликовано: 11 июня 201510 г Автор siv1987, не могли бы вы удалить префикс таблицы из заголовка темы ?
Опубликовано: 11 июня 201510 г Включите лог медленных запросов или в initdata.php включить дебаг sql запросов, на странице выбора тегов добавьте ?debug=1 и смотрите за какое время он выполняется. Мне кажется что добавления индекса может и не помочь, потому что там есть другие индексы.
Опубликовано: 11 июня 201510 г Автор потому что там есть другие индексы. Вообще-то есть один индекс (составной) с участием поля (tag_id):tag_aap_lookup + tag_text Т.е. нужно задействовать этот самый (tag_aap_lookup). Похоже, это md5 от (tag_text). Завтра проверю...Если действительно так, то в собственном запросе вместо искомых значений тегов нужно искать их md5-эквиваленты по полю (tag_aap_lookup) Мне кажется что добавления индекса может и не помочьДолжен. Поскольку (tag_text) в вышеуказанном индексе находится на второй позиции => при поиске по полю (tag_text) этот индекс не используется. Именно так и было в моём запросе (проверял EXPLAIN'ом - имел место перебор всех записей в таблице тегов) Изменено 11 июня 201510 г пользователем cyrax_02
Опубликовано: 12 июня 201510 г Автор Нет. Это не md5. Это хрен знает что.Нужно колдовать с полем (tag_perm_aai_lookup). По нему есть индекс и он, похоже, каким-то чудесным образом связан с полем (tag_text). Пока оставим сабж до конца лета...
Опубликовано: 12 июня 201510 г Т.е. нужно задействовать этот самый (tag_aap_lookup). Похоже, это md5 от (tag_text). Завтра проверю...Нет. Это не md5. Это хрен знает что.Так, может, не стоит гадать, а взглянуть внутрь...admin/sources/classes/tags/abstract.php /** * Build a key */ private function _getKey( $where ) Также есть методы для работы с тегами (поиска, добавления, замены, удаления и др.)
Опубликовано: 12 июня 201510 г Автор /** * 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'] ) ); } }
Опубликовано: 12 июня 201510 г Не все так просто там как казалось бы - выбор только по тегу и все. Условий там несколько, индексов несколько, а значит оптимизатор выберет один индекс для поиска.
Обнаружил, что по полю core_tags.tag_text нет индекса. Почему ?
Как IP.Board без индекса фильтрует темы по тегам ? Перебором/сравнением всех тегов из (core_tags) ?
Изменено пользователем cyrax_02