-
Добрый день ) Подскажите, есть ли смысл создавать индекс на поле таблицы, которое пересчитывается каждые 10 минут. Я так понимаю БД придется постоянно перестраивать его в таком случае и индекс не нужен?
-
не нужен да и нужно ли такое поле тоже вопрос
-
следуя твоей же логике :
если индекс не нужен потому что поле изменяется и сервер должен суетиться перестраивая индекс, то:
и само это поле тоже не нужно. потому что серверу надо будет постоянно его менять.
-
Мало данных. Что за поле, сколько записей, как пересчитывается? Если это некий сводный рейтинг, который часто стоит в Where-секции, то может и надо индекс сделать. А может стоит проиндексировать исходные для пересчета данные. А может пересчитывать надо не все данные, а изменившиеся и на лету. ХЗ короче.
-
целесообразность индекса пропорциональна [средняя интенсивность запросов на чтение с условием по этому полю / средняя интенсивность изменений]
-
Записей в табличке ~13k, поля не существует, оно считается на лету (по нему идет ORDER BY), как (первое_поле_таблицы(FLOAT)*второе_поле_этой_таблицы(FLOAT), проблема что первое поле этой таблицы пересчитывается на основе статистики сайта по планировщику(*/10 мин), а второе поле может в любой момент изменяться юзером. Вот и думаю, может это поле создать хотя бы, чтобы сортировать по уже существующим данным, а не на лету посчитанным и стоит ли индекс пихать)
-
>neOleg (06.02.15 14:46) [5] для любого действия нужна причина. сейчас, как понимаю, нет ни поля, ни индекса по какой причине задумались над созданием?
-
SELECT *, first*second AS multiply ORDER BY multiply
Мне подумалось, что если будет поле multiply, то оно будет вычислять раз в 10 минут, а сейчас вычисляется при каждом обращении юзеров к сайту. Записей в БД будет только прибавляться само собой
-
то оно будет вычислять раз в 10 минут, а сейчас вычисляется при каждом обращении юзеров к сайту.
то есть раз месяц
-
-
целесообразность введения поля = [средняя активность юзеров на сайте сильно больще раз в 10 мин]
-
то есть раз месяц
Ну, сайт несколько популярнее) 100к юзеров в день. Ладно буду тестить, смотреть на практике)
-
а с чего взял что ORDER BY multiply
Ну, если будет поле с индексом, то при таком SELECT * FROM table ORDER BY multiply будет использован индекс
-
> будет использован индекс да ну? проверь командой по ссылке.
-
-
Using index Для извлечения данных из столбца используется только информация дерева индексов; при этом нет необходимости производить собственно чтение записи. Это применимо для случаев, когда все используемые столбцы таблицы являются частью одного индекса. в твоем тесте нет других данных, поэтому оптимизатор решил использовать индекс как данные. не совсем корректный тест (если только в реальности именно так и будет). но он также может решить наоборот не использовать индекс. там же, по ссылке в меню есть описание в каких случаях используется/нет, прямая - http://www.mysql.ru/docs/man/ORDER_BY_optimisation.htmlно проще реальные запросы на примерно реальных данных проверять ехплейном.
-
+ причем заметь как написано > В некоторых случаях MySQL может использовать индекс, чтобы выполнить запрос ORDER BY или GROUP BY без выполнения дополнительной сортировки. т.е. по другому, в основном индекс в ORDER/GROUP BY не используется.
-
2neOleg А сколько обычно записей в выборке для сортировки? Если немного, то, по моему, нет смысла в "проблемном" индексе даже если он будет задействован.
-
ИМХО, там даже в записи расчетных данных смысла нет, и в поле под него, не то что в индексе.
|