Конференция "Базы" » MySQL index [MySQL]
 
  • neOleg (06.02.15 04:25) [0]
    Добрый день )
    Подскажите, есть ли смысл создавать индекс на поле таблицы, которое пересчитывается каждые 10 минут. Я так понимаю БД придется постоянно перестраивать его в таком случае и индекс не нужен?
  • ухты © (06.02.15 08:43) [1]
    не нужен
    да и нужно ли такое поле тоже вопрос
  • кгшзх © (06.02.15 08:43) [2]
    следуя твоей же логике :

    если индекс не нужен потому что поле изменяется и сервер должен суетиться перестраивая индекс, то:

    и само это поле тоже не нужно.
    потому что серверу надо будет постоянно его менять.
  • Sergey13 © (06.02.15 08:56) [3]
    Мало данных. Что за поле, сколько записей, как пересчитывается?
    Если это некий сводный рейтинг, который часто стоит в Where-секции, то может и надо индекс сделать. А может стоит проиндексировать исходные для пересчета данные. А может пересчитывать надо не все данные, а изменившиеся и на лету.
    ХЗ короче.
  • junglecat © (06.02.15 13:05) [4]
    целесообразность индекса пропорциональна [средняя интенсивность запросов на чтение с условием по этому полю / средняя интенсивность изменений]
  • neOleg (06.02.15 14:46) [5]
    Записей в табличке ~13k, поля не существует, оно считается на лету (по нему идет ORDER BY), как (первое_поле_таблицы(FLOAT)*второе_поле_этой_таблицы(FLOAT), проблема что первое поле этой таблицы пересчитывается на основе статистики сайта по планировщику(*/10 мин), а второе поле может в любой момент изменяться юзером.
    Вот и думаю, может это поле создать хотя бы, чтобы сортировать по уже существующим данным, а не на лету посчитанным и стоит ли индекс пихать)
  • Кщд © (06.02.15 15:11) [6]
    >neOleg   (06.02.15 14:46) [5]
    для любого действия нужна причина.
    сейчас, как понимаю, нет ни поля, ни индекса
    по какой причине задумались над созданием?
  • neOleg (06.02.15 15:15) [7]
    SELECT *, first*second AS multiply ORDER BY multiply

    Мне подумалось, что если будет поле multiply, то оно будет вычислять раз в 10 минут, а сейчас вычисляется при каждом обращении юзеров к сайту. Записей в БД будет только прибавляться само собой
  • кгшзх © (06.02.15 16:07) [8]
    то оно будет вычислять раз в 10 минут, а сейчас вычисляется при каждом обращении юзеров к сайту.

    то есть раз месяц
  • sniknik_ (06.02.15 16:18) [9]
    а с чего взял что
    ORDER BY multiply
    будет использовать индекс? http://www.mysql.ru/docs/man/EXPLAIN.html
  • junglecat © (06.02.15 16:19) [10]
    целесообразность введения поля = [средняя активность юзеров на сайте сильно больще раз в 10 мин]
  • neOleg (06.02.15 16:45) [11]
    то есть раз месяц

    Ну, сайт несколько популярнее) 100к юзеров в день. Ладно буду тестить, смотреть на практике)
  • neOleg (06.02.15 16:48) [12]
    а с чего взял что
    ORDER BY multiply


    Ну, если будет поле с индексом, то при таком
    SELECT * FROM table ORDER BY multiply
    будет использован индекс
  • sniknik © (06.02.15 19:56) [13]
    > будет использован индекс
    да ну? проверь командой по ссылке.
  • neOleg (06.02.15 21:12) [14]
  • sniknik © (07.02.15 13:35) [15]
    Using index
       Для извлечения данных из столбца используется только информация дерева индексов; при этом нет необходимости производить собственно чтение записи. Это применимо для случаев, когда все используемые столбцы таблицы являются частью одного индекса.

    в твоем тесте нет других данных, поэтому оптимизатор решил использовать индекс как данные.
    не совсем корректный тест (если только в реальности именно так и будет). но он также может решить наоборот не использовать индекс.
    там же, по ссылке в меню есть описание в каких случаях используется/нет, прямая - http://www.mysql.ru/docs/man/ORDER_BY_optimisation.html
    но проще реальные запросы на примерно реальных данных проверять ехплейном.
  • sniknik © (07.02.15 13:42) [16]
    +
    причем заметь как написано
    > В некоторых случаях MySQL может использовать индекс, чтобы выполнить запрос ORDER BY или GROUP BY без выполнения дополнительной сортировки.
    т.е. по другому, в основном индекс в ORDER/GROUP BY не используется.
  • Sergey13 © (09.02.15 08:46) [17]
    2neOleg
    А сколько обычно записей в выборке для сортировки? Если немного, то, по моему, нет смысла в "проблемном" индексе даже если он будет задействован.
  • sniknik_ (09.02.15 09:59) [18]
    ИМХО, там даже в записи расчетных данных смысла нет, и в поле под него, не то что в индексе.
 
Конференция "Базы" » MySQL index [MySQL]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]