Ответы пользователя по тегу MySQL
  • Как узнатьсколько строк вернул запрос?

    grumblik
    @grumblik
    В меру любопытен и разумно пытлив
    Тут два пути. Первый получить с помощью SQL запроса - точно верный метод.
    И получить с помощью подсчёта строк полученных из запроса - не всегда верный метод(только при маленьком наборе данных).

    Сейчас объясню почему:
    Представьте, что у вас таблица на 100 000 000 000 строк.
    Вы делаете запрос и получаете в результате 10 000 000 000 строк.
    Допустим все эти строки вам нужны в программе (пользователь в форме на сайте глюканул и запросил все данные за последние 10 лет). Но вы сначала проверяете с помощью count(*) сколько вернулось строк.

    Очевидные плюсы - ваша программа не вылетит потому, что вы получаете всего одно значение, а не 10 000 000 000(И соответственно можете не допустить выгрузки такого большого количества данных которые подвесят вашу систему - что то типа if result > 10 000 then return "Слишком много данных"). Во вторых анализатор SQL вполне возможно обойдётся внутренней статистикой, а не проходом по индексам (или если совсем не повезёт фул тейбл сканом, что даже на миллионой таблице может сильно затормозить). В любом случае при использовании count мы не наблюдаем падения производительности, а в хорошем случае наблюдаем её прирост.

    А теперь представим, что вам нужно сделать отчет, вы знаете SQL запрос который вернёт нужные значения, но вы не знаете сколько строк он вернёт. RAM на вашей машине ограничен. Есть вариант, что программа сожрёт всю доступную память и уйдёт в своп(или упадёт если она 32'ух битная и приложению максимум выделяется 1,5 Гб) если заранее не проверить сколько данных мы запихнём в программу. Поэтому нужно перед выгрузкой данных проверить сколько у нас получится этих данных.

    По этому самый лучший вариант сначала "SELECT COUNT(*) FROM chel", а потом уже "SELECT <какие-то_столбцы> FROM chel".
    Это будет правильно. Ну и старайтесь избегать подзапросов там где без них можно обойтись.

    PS это облегчит жизнь и вам и DBA которые будут сопровождать вашу БД.
    С уважением админ как раз одной такой большой БД у которого программисты периодически пишут косячный SQL
    Ответ написан
    2 комментария
  • Хочу поднять debian сервер для разработки. Как?

    grumblik
    @grumblik
    В меру любопытен и разумно пытлив
    Если уж поближе к полевым условиям то ставить самому и с нуля(сидеть и тыкать "далее").
    Проблем в установке нет никаких. Разве что тремор в руках и мимо кнопок промахиваться)
    У поднятия ОС с нуля есть важный плюс, ты примерно знаешь, как что делается, искать проблемы и решать их в последствии гораздо проще.
    А вот вагрант и готовый образ, это не совсем полевые условия.

    Хотя всё зависит от того, что хочешь:
    Хочешь не понимать как там внутри работает. Берёшь предустановленное и оно всегда работает.
    Хочешь понимать, делаешь всё сам, экспериментируешь с настройками, ловишь косяки, учишься их исправлять.

    Опыт в обоих вариантах получаешь, но во втором варианте гораздо шире.

    Если выберешь первый вариант, то советую познакомиться с Chef, тогда будет совсем просто в итоге.
    Ответ написан
    Комментировать
  • Почему Mysql кушает оперативку?

    grumblik
    @grumblik
    В меру любопытен и разумно пытлив
    Нормальное состояние, что mysql кушает оперативу. Не нужно складывать потребляемые мегабайты - это разделяемая память(ну или как-то так зовётся).
    В общем если показано 602 метра выделено, это значит, что для всех потоков, а не для каждого в отдельности.
    При этом нужно различать выделенную, зарезервированую, используемую память.
    sudo apt-get install mysqltop
    sudo mysqltop
    Ответ написан
    1 комментарий