Что такое индексная таблица MySQL? - PullRequest
1 голос
/ 08 мая 2009

Мне нужно ускорить запрос. Является ли таблица индекса тем, что я ищу? Если так, как я могу сделать один? Нужно ли обновлять его при каждой вставке?

Вот схемы таблиц:

--table1--   |   --tableA--   |    --table2--
id           |   id           |    id
attrib1      |   t1id         |    attrib1
attrib2      |   t2id         |    attrib2
             |   attrib1      |

И запрос:

SELECT 
  table1.attrib1, 
  table1.attrib2,
  tableA.attrib1 
FROM 
  table1,
  tableA
WHERE 
  table1.id = tableA.t1id
  AND (tableA.t2id = x or ... or tableA.t2id = z)
GROUP BY 
  table1.id

1 Ответ

7 голосов
/ 08 мая 2009

Вам необходимо создать составной индекс для tableA:

CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)

Индексы в MySQL считаются частью таблицы: они обновляются автоматически и используются автоматически всякий раз, когда оптимизатор решает, что их стоит использовать.

MySQL не использует термин index table.

Этот термин используется Oracle для обозначения того, что другие базы данных называют CLUSTERED INDEX: своего рода таблица, в которой сами записи расположены в соответствии со значением столбца (или набора столбцов).

В MySQL:

  • При использовании хранилища MyISAM индекс создается как отдельный файл с расширением .MYI.

    Содержимое этого файла представляет собой B-Tree, каждый лист которого содержит ключ индекса и указатель на смещение в файле .MYD, который содержит данные.

    Размер указателя определяется настройкой сервера, называемой myisam_data_pointer_size, которая может варьироваться от 2 до 7 байтов и по умолчанию равна 6, начиная с MySQL 5.0.6.

    Это позволяет создавать MyISAM таблиц до 2 ^ (8 * 6) bytes = 256 TB

  • В InnoDB все таблицы упорядочены по PRIMARY KEY, он не поддерживает таблицы, организованные в куче.

    Таким образом, каждый индекс фактически является простой таблицей InnoDB, состоящей из одной PRIMARY KEY из N+M записей: N записей, являющихся индексированными значениями, и M записей, являющихся PRIMARY KEY основной записи таблицы, которая содержит проиндексированные данные.

...