У меня есть огромный стол, который мне нужно оптимизировать.Я думаю, что мне нужно использовать индексы, но я надеялся получить дополнительную информацию о них - PullRequest
1 голос
/ 16 декабря 2011

Итак, у меня есть большая таблица, которую я запрашиваю (выбираю только) довольно часто. Таблица длиной около 12 000 строк. С момента появления iOS время выполнения этих запросов на выбор увеличилось в 4-5 раз.

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

SELECT * FROM book_content WHERE book_id = ? AND chapter = ? ORDER BY verse ASC

Как я могу создать индекс для этой таблицы? Это команда, которую я просто запускаю один раз? Что именно будет делать индекс? Я не узнал об этом в школе, поэтому они все еще кажутся мне чем-то вроде магии, поэтому я надеялся получить небольшую инструкцию.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 16 декабря 2011

Вы хотите индекс для book_id и главы.Без индекса сервер может выполнить table scan и, по существу, загрузить всю таблицу в память для выполнения поиска.Выполните быстрый поиск по команде CREATE INDEX СУБД, которую вы используете.Вы создаете индекс один раз и каждый раз, когда вы делаете INSERT или DELETE или UPDATE, сервер будет автоматически обновлять индекс.Индекс может быть UNIQUE и может быть на нескольких полях (в вашем случае, book_id и chapter).Если вы сделаете это UNIQUE, база данных не позволит вам вставить вторую строку с тем же ключом (в данном случае, book_id и chapter).На большинстве серверов наличие одного индекса в двух полях отличается от наличия двух отдельных индексов в отдельных полях каждое.

Пример Mysql:

CREATE INDEX id_chapter_idx ON book_content (book_id,chapter);

Если вам нужна только одна запись длякаждая book_id, комбинация глав, используйте эту команду:

CREATE UNIQUE INDEX id_chapter_idx ON book_content (book_id,chapter);

A PRIMARY INDEX - это специальный индекс, который UNIQUE и NOT NULL.Каждая таблица может иметь только один первичный индекс.Фактически каждая таблица должна иметь один первичный индекс для обеспечения целостности таблицы, особенно во время объединений.

2 голосов
/ 16 декабря 2011

Когда вы объявляете столбец в качестве первичного ключа, автоматически создается индекс для этого столбца. В вашем случае для более частого использования выбор индекса идеален, потому что они улучшают время запросов на выбор и ухудшают время вставки. Таким образом, вы можете создавать нужные вам индексы, не беспокоясь о производительности

2 голосов
/ 16 декабря 2011

Вам не нужно думать об индексах как о «волшебных».

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

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

chicken: 30,34,72,84

, сообщая, что на этих 4 страницах вы найдете рецепты курицы.Найти эту информацию в индексе гораздо быстрее, чем прочитать всю книгу, потому что индекс короче и (что более важно) расположен в алфавитном порядке, поэтому вы можете быстро найти нужное место в индексе.

Итак, в общем случае вы хотите создать индексы для столбцов, к которым вам необходимо регулярно обращаться (например, book_id и chapter).

1 голос
/ 16 декабря 2011

Индексы очень чувствительный предмет.Если вы планируете использовать их, вы должны быть очень осторожны, сколько вы зарабатываете.Первичный ключ или идентификатор каждой таблицы должен иметь кластеризованный индекс.Все остальное зависит от того, как вы планируете их использовать.Я очень слабо разбираюсь в предметах индексов и фактически никогда не работал с ними, но на семинаре, который я только что вчера наблюдал, вы не хотите слишком много индексов - потому что они могут на самом деле замедлять работу, когда вы этого не делаетенужно использовать их.

Допустим, вы поместили индекс в 5 из 8 полей таблицы.Каждый индекс предназначен для определенного запроса где-то в вашем программном обеспечении.Хорошо, когда выполняется 1 запрос, он использует этот 1 индекс и не нуждается в другом 4. Так что это ненужный вес для этого 1 запроса.Если вам нужен индекс, убедитесь, что этот индекс может быть полезен во многих местах, а не только в 1 месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...