Ответы пользователя по тегу MySQL
  • Insert low_priority подавляет только select?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    На все 3 вопроса ответ один: ничего не изменится.

    Таблицы: InnoDB

    https://dev.mysql.com/doc/refman/8.0/en/insert.html
    LOW_PRIORITY affects only storage engines that use only table-level locking (such as MyISAM, MEMORY, and MERGE).


    В доке mariadb есть хорошее описание что это есть такое: https://mariadb.com/kb/en/high_priority-and-low_pr...
    Ответ написан
    Комментировать
  • Почему в генерируемой колонке нельзя задать свойство STORED?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f14773...
    it works

    Смотрите внимательно на текст ошибки и, особенно, на место на которое та указывает.
    Ответ написан
    9 комментариев
  • Ошибка PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'url1' in 'OLD' in?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Триггер на таблице, наверняка.
    Проверьте какие триггеры есть на таблице и не надо ли их тоже поправить после удаления url1
    Ответ написан
    Комментировать
  • Как добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Могу ответить про postgresql.

    без ее блокировки

    Именно в такой постановке вопроса - никак.

    С короткой блокировкой (доли секунд) - другое дело. Принципиально зависит от конкретного alter table и версии базы
    Простой alter table foo add column col; - ставите statement_timeout to '100ms' и вносите как есть.
    alter table foo add column col default const - после pg11 см. выше, до - интересное приключение
    Если default не константа - сначала внесите как default null, затем обновляете частями. как в процессе до pg11.
    Ответ написан
    Комментировать
  • Как работает поиск по комбинированным индексам?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Возможность у планировщика такая есть. bitmap index scan может объединять проход по нескольким индексам. Воспользуется ли планировщик этим планом или предпочтёт что-то другое и, тем более, будет ли это дешевле - зависит от статистики распределения данных, настроек, возможностей железа.

    Как решит планировщик в вашей системе - ответит explain. Сколько чего реально стоит в рантайме - ответит explain (analyze,buffers)

    Не обратил внимание на второй тег, это про postgresql было.

    mysql так же умеет, там называется Index Merge. Будет ли использоваться - опять же на усмотрение планировщика.
    Ответ написан
    2 комментария
  • Как проверить правильность запроса после рефакторинга?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    (query 1) except (query 2);
    (query 2) except (query 1);
    Ответ написан
    2 комментария
  • Запрос в MySQL. Есть идея?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Для поиска самих link_id
    select link_id from tablename
    group by link_id
    having count(*) = sum(flag  = 1)

    Либо
    select id from links
    where exists(select null from tablename where flag  = 1 and link_id = links.id) -- возможно это условие вам по задаче не нужно
    and not exists(select null from tablename where flag != 1 and link_id = links.id)


    Вычитывать сами строки можно попробовать через
    select ...
    from tablename t
    where t.flag = 1
    and not exists(select null from tablename sq where sq.link_id = t.link_id and sq.flag != 1)


    При том, какой из вариантов эффективнее - критично зависит от распределения данных. При большой числе различающихся link_id с малым числом строк на каждый link_id и малым ожидаемом числе подходящих строк под задачу может быть эффективнее именно
    select ... from tablename t where t.link_id in (
    select q.link_id from tablename q
    group by q.link_id
    having count(*) = sum(flag  = 1)
    )


    При большом числе строк на каждый link_id и малом числе разных link_id может оказаться разумнее аналогично сначала достать link_id удовлетворяющие условию и по ним уже доставать данные.

    Третий запрос по ожиданию лучше отзовётся на случай малого числа flag = 1 строк в таблице.

    Самый быстрый на чтение вариант, впрочем, всё равно не выполнять обработку этого фильтра налету, а каким-то образом его материализовать и хранить предварительно рассчитанным.
    Ответ написан
    7 комментариев
  • Как сделать запрос к 3 таблицам с условием where?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    По одному полю с таблицы проще подзапросом.
    select 
      (select deal_id from table_1 where item_id = 9041) as deal_id_1
      (select deal_id from table_2 where item_id = 9041) as deal_id_2
      (select deal_id from table_3 where item_id = 9041) as deal_id_3
    Ответ написан
    Комментировать
  • Как убрать ERROR 1366 (HY000): Incorrect string value: '\xF4\xA9"\xDA\xA7\x0D...'?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    https://dev.mysql.com/doc/refman/8.0/en/encryption...
    and returns a binary string containing the encrypted output

    И почему же бинарный кусок данных является некорректными данными для текстового поля? Ну прям решительно непонятно.
    Используйте подходящий тип данных.
    Ответ написан
    1 комментарий
  • Можно ли создать для колонки index только для null, или только для не null?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Когда создаешь index для колонки, то создается новая таблица для индексов

    Это не таблица.

    Для поиска 'where column = null'.

    Для этого условия не нужен ни индекс ни даже данные. По определению пустая выборка на этапе парсера.

    Если речь о where column is null - так бывает в принципе, называется частичный индекс (partial index). Но mysql всё ещё такое не умеет.
    Ответ написан
    Комментировать
  • На 99% автоматическая репликация PostgreSQL/MySQL?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Не лёг мастер, а нарушилась сеть между мастером и репликой. Реплика стала мастером.
    Ваши действия? У вас два мастера, каждый разумеется считает что верные данные у него.

    Называется split brain. Автоматически не чинится принципиально.

    Иначе говоря - зачем вам это обилие головной боли?
    Ответ написан
    6 комментариев
  • Какие типы данных использовать в bindParam в PDO?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Вопрос в том, какие константы использовать вместо ??? при типе данных Int?

    Вы так спрашиваете, будто для чисел есть что-то кроме PDO::PARAM_INT
    Их вообще полтора землекопа только: https://www.php.net/manual/en/pdo.constants.php

    будет ли при нулевом значении запрос изменяться

    Нет, не будет. Это ваша задача составить верно запрос. При том не пытайтесь сделать универсальный запрос.
    Ответ написан
  • Почему запрос возвращает объект, если параметр - false?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    select 'foo' = '', 'foo' = 0, 'foo' = false;
    Как думаете, какие 3 результата сравнения будут? А теперь проверьте.

    Так работает динамическая типизация операндов различающихся типов в mysql.
    Ответ написан
  • Как сделать чтобы большая БД держала нагрузку?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Ооо.... Вы это сейчас вообще серьёзно?

    Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
    Запускаю свою облачную платформу, код и архитектура создана с нуля.

    У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

    Например: юзер пишет какой-то запрос и ему не нужно указывать на какой сервер что отправлять или откуда читать, для него это один сервер.

    Значит этому юзеру достаточно ходить только на мастер.
    Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
    select somefunc();
    Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

    Другой пример:
    begin isolation level repeatable read;
    select ...
    update ...
    commit;

    Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
    И прочие принципиально-нерешаемые вопросы.

    DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
    Ответ написан
    Комментировать
  • Как работает кластеризация mysql или другой БД кластер?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Такой запрос будет очень медленный

    Почему? Ну если только table - это не таблица, а развесистый view.
    Если таблица - читаем потоком данные удобным для субд способом (сортировки не запрошено - субд выберет удобный для себя порядок чтения) и шлём запросившему. Простая штука, и если производительности не хватает здесь - то это вопрос не к базе и её масштабированию, а к приложению: зачем вообще понадобился там этот не детерминированный миллион строк из таблицы.

    Кластер - это слово очень общее.
    Мастер-реплика cold standby - кластер
    Мастер-реплика hot standby - кластер
    Мастер-мастер - кластер
    N шардов - кластер
    Гетерогенная система с двухфазным коммитом - всё равно кластер

    то что делает кластер

    Неправильный задаёте вопрос.
    Сначала определяете зачем вам головная боль, с какой целью вы хотите добавить второй сервер СУБД и почему вам недостаточно одного - затем смотрите в каком направлении вам необходимо для решения этой задачи двигаться.
    Ответ написан
    Комментировать
  • Изменить запись, если существует, как реализовать в mysql?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Ответ написан
    Комментировать
  • Что это за синтаксис дампа и как его перекинуть в mysql?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Это синтаксис именно MS SQL.
    Но sqlite его для совместимости тоже умеет: https://www.sqlite.org/lang_keywords.html

    Следовательно, импортируйте сперва в sqlite, затем экспортируйте нормально. В нормальных стандартных кавычках - если ваш mysql в sql_mode=ANSI_QUOTES - или в специфичных для mysql апострофах `.
    Ответ написан
    1 комментарий
  • Из за чего могут возникать ошибки в базе данных?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    myisam же. Так же известный как бинарная куча нетранзакционного мусора. Это для него нормально и вполне ожидаемо.
    Ответ написан
    Комментировать
  • On dublicate key Ошибка Mysqli?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    ON DUPLICATE KEY UPDATE. Сверяйте по буквам.

    А если делаю ON DUBLICATE KEY UPDATE `pipeline_name` = '$pipelinename' ,
    то записи дублируются

    Удивительно. Верится слабо.
    Ответ написан
    5 комментариев
  • MySQL и парадокс c LEFT JOIN ON(...) - где логика?

    Melkij
    @Melkij
    PostgreSQL DBA, contributor
    Никакого парадокса, задокументированное поведение. Скопирую недавний ответ отсюда:
    Потому что вообще не надо сравнивать строки и числа. Если поле строковое - сравнивайте только со строкой. Хоть при этом происходит и вполне задокументированное поведение.
    Ответ написан
    6 комментариев