Ответы пользователя по тегу MySQL
  • Можно ли совместить базы по id?

    @bioroot
    Читайте про INSERT ... SELECT Коротко, нужно создать структуру новой таблицы, а затем сделать в неё INSERT, выбрав данные запросом (например, как написал Ice).
    Ответ написан
    Комментировать
  • Как ограничить число отношений к записи?

    @bioroot
    На самом деле очень интересный вопрос. Логику, которую вам предлагают выше, всё-равно придётся использовать. Т.е. начинаем транзакцию, пробуем воткнуть данные, если что-то пошло не так - откатываем транзакцию. Но, насколько я вас понял, в первую очередь вам не нравится, что ограничения на количество мест придётся выносить в код, и откатывать транзакцию тоже из кода. Это нормальная практика, но если очень хочется вынести ограничения в базу - посмотрите в сторону CONSTRAINT. Правда есть эта штука только в последней версии MySQL (в PostgreSQL есть давно). С помощью этих проверок вы можете, например, создать колонку с количеством свободных мест в ресторане и потребовать, чтобы оно было не отрицательно. Тогда на уровне кода вам нужно будет только не забыть скрутить на единицу счётчик свободных мест. Если ограничение будет нарушено, то база плюнет ошибкой и транзакция откатится.
    Ответ написан
    Комментировать
  • Как оптимизировать запрос с INNER JOIN и ORDER BY по нескольким таблицам?

    @bioroot
    Давно не пользовался MySQL, однако напишу по старой памяти. У вас очень много одиночных индексов, а в вашем случае этого уже не достаточно. Надо переходить минимум на двойные. К примеру, в таблице bank вас интересуют только slug и id. Но в случае одинарных индексов обработка вашего запроса будет происходить примерно следующим образом.
    1. MySQL видит ключ slug, лезет в хранилище индекса и находит там указатель на соответствующую строку с данными.
    2. MySQL смотрит, а что ему ещё нужно из этой таблицы. Оказывается, нужен id для джойна с таблицей branch.
    3. MySQL лезет в хранилище данных, находит там строчку (или строчки) по указателю из 1-го пункта и из них вынимает id.

    Если бы у вас был двойной индекс (slug, id), то нужный id обнаружился бы в хранилище индексов рядом со slug. И дальше в данные вообще не понадобилось бы лезть.

    Вообще следующая ступень оптимизации обычно сводится к поиску удачных сочетаний множественных индексов. И не забывайте, что строить их дороже одинарных и второе и далее значение не используются, если в запросе нет первого.
    Ответ написан
  • Как это так? Команда Update сделала Truncate таблицы?

    @bioroot
    Во-первых, у вас после G-60019 кавычка не закрыта. Во-вторых, надо смотреть, что у вас за записи в базе. Но никто не запрещает заменить UPDATE на SELECT и самому увидеть какую выборку сделает запрос:
    SELECT CASE WHEN product_sku = 'G-60019' ... END AS test_field  FROM brand_sku_increment;
    Ответ написан