Итак, у меня есть забавное требование создания индекса для таблицы только для определенного набора строк.
Вот так выглядит моя таблица:
USER:userid, friendid, созданный, blah0, blah1, ..., blahN
Теперь я хотел бы создать индекс для:
(userid, friendid,создан)
, но только в тех строках, где userid = friendid.Причина в том, что этот индекс будет использоваться только для удовлетворения запросов, в которых предложение WHERE содержит «userid = friendid».Будет много строк, где это НЕ так, и я действительно не хочу тратить все это дополнительное пространство на индекс.
Другой вариант - создать таблицу (таблицу запросов), которая будет заполнена.при вставке / обновлении этой таблицы и создании триггера для этого, но, опять-таки, я предполагаю, что индекс этой таблицы будет означать, что данные будут храниться дважды.
Как mysql хранит первичные ключи?Я имею в виду, упорядочена ли таблица по первичному ключу или она упорядочена по порядку вставки, а PK похож на обычный уникальный индекс?
Я проверил кластерные индексы (http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html),, но, похоже, только InnoDB их поддерживаетЯ использую MyISAM (я упоминаю об этом, потому что тогда я мог бы создать кластерный индекс для этих 3 полей в таблице запросов).
Я в основном ищу что-то вроде этого:
ИНДЕКС ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ ТАБЛИЦЫ (ИД-пользователя, друга, создан) ГДЕ ИД-пользователя = друга *