Ответы пользователя по тегу Базы данных
  • Как пофиксить SQL запрос?

    @bizon2000
    Java-программист
    Можно сделать условное добавление строки с нулевым счетчиком и потом выполнить обновление строки для изменения счетчика:
    INSERT INTO player_mob_kills (player_id, mob_id, count)
        SELECT :player_id, :mob_id, 0
            WHERE NOT EXISTS(SELECT *
                                 FROM player_mob_kills
                                 WHERE player_id = :player_id
                                   AND mob_id = :mob_id
                            )
    UPDATE player_mob_kills
        SET count=count + :count
        WHERE player_id = :player_id
          AND mob_id = :mob_id;
    Ответ написан
    Комментировать
  • Какой индекс выбрать ASC или DESC?

    @bizon2000
    Java-программист
    Порядок сортировки индекса сказывается только при создании индексов с составными ключами, т.е., с ключами из нескольких полей. Т.е., если у вас имеется индекс с ключом (field1, field2, field3) и более частыми являются запросы со следующей сортировкой:
    ORDER BY field1 ASC, field2 DESC, field3 ASC, то тогда вам следует использовать индекс (field1 ASC, field2 DESC, field3 ASC) или (field1 DESC, field2 ASC, field3 DESC). Когда же у вас индекс имеет ключ из одного поля, то порядок сортировки его не имеет значения, т.к. SQL engine умеет сканировать индекс в обоих направлениях.
    Для добавления записей и для выборок одиночных записей порядок сортировки индекса не играет роли - производительность будет абсолютно одинакова, а для выборки последовательности записей, т.е. при сканировании диапазона индекса этот порядок уже может сиграть, но надо понимать, что на достаточно больших диапазонах индекса. Если просто выгребать всего 50 первых записей и без WHERE, то различие будет незаметно.
    Ответ написан
    Комментировать