Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Поле (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'] ) );
               }
       }

Опубликовано:

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.