LINUX.ORG.RU

Mysql и индексы

 , ,


1

1

Здравствуйте. Есть таблица books с полями

id - integer
title - char(100)
desc - text
autor - char(100)
status - tinyint(1)
date - datetime
cover_url - varchar(1024) - тут ссылка хранится неизвестной длины
file_url - varchar(1024) - тут ссылка хранится неизвестной длины

Для такой таблицы нужны индексы? Если да, то какие? До этого только к id указывала primary key, но часто слышала про индексы, вот и думаю начать их использовать.

Поиск (like %q%) будет осуществляться по полю title.

При выводе содержимого будет сортироваться по date

Может быть в каком-то поле нужно будет другой тип данных использовать? Или со структурой всё ок?


Поиск (like %q%) будет осуществляться

Без задействования индексов в любом случае. Если нужно искать слова, то можно использовать full text индекс и match/against вместо like https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

При выводе содержимого будет сортироваться по date

Можно сортировать по id и не делать лишний индекс.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

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

jessgt ()
Ответ на: комментарий от jessgt

сортирую по date чтоб именно свежие книги по умолчанию показывались

Если предполагается пагинация, то нужен индекс date,id чтобы вместо offset использовать отбор по date/id. Загугли «mysql seek pagination»

no-such-file ★★★★★ ()

Индексы нужны для ускорения запросов, то есть какие ставить индексы зависит от того, какие будут запросы. Как уже сказали, если будет сортировка по date, нужен индекс по date, индекс по title не ускорит запрос like %q%, ускорит только =q и like q%

goingUp ★★★★★ ()
Ответ на: комментарий от beaver

Спасибо.

ищешь

А для поля autor нужен индекс? Будет запрос в виде

SELECT `id`, `title` FROM `books` WHERE `autor` = 1

или нужен если очень много совпадений будет, а иначе нет?

jessgt ()
Последнее исправление: jessgt (всего исправлений: 1)
Ответ на: комментарий от jessgt

А для поля autor нужен индекс?

«Преждевременная оптимизация — корень всех зол»

А вообще, тебе никто не мешает поиграться с индексами и посмотреть на то, как они влияют на производительность.

beaver ()

Индексы можно добавить в любой момент. Так как запросы у тебя по-любому поменяются то спешить не стоит.

Как появятся тормозящие запросы, так и добавляй.

по date,id (ВНЕЗАПНО!) можно сделать primary key. id тут нужен т.к. primary key должны быть уникальными. К сожалению не сработает в innodb. Плюс такого индекса в том, что он - всего лишь порядок расположения данных на диске. Т.е. сами данные изначально отсортированы по нему.

char(100)

Заменить на varchar, чтобы не тратить место и увеличить. Иначе как ты добавишь туда, например «Путешествия в некоторые отдаленные страны света Лемюэля Гулливера, сначала хирурга, а потом капитана нескольких кораблей»

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.