Для бэкапа и импорта данных пользуюсь очень простым и быстрым php-скриптом с удобным интерфейсом. Sypex Dumper справляется с таблицами в сотни тысяч записей, в отличие от того же phpMyAdmin или других оконных менеджеров для работы с БД. Про консоль mysql я сейчас не говорю.

В MySQL есть достаточное количество встроенных функций и фич, которые упрощают код. К сожалению, не все программисты знают об этом и используют свои «велосипеды». читать дальше →

SQL_CALC_FOUND_ROWS

Любой web-программист сталкивался с постраничным выводом информации. Например, в таблице лежит 1000 новостей и нужно выводить их по 10 штук на странице, а внизу вывести листалку страниц.
Программист пишет 2 запроса:

1) SELECT * FROM news WHERE activity=1 LIMIT 0, 10 // выборка записей
2) SELECT COUNT(*) FROM news WHERE activity=1// узнаем кол-во всех новостей

Второй запрос нужен для вывода листалки. Однако в MySQL есть достаточно удобная возможность объединения этих двух запросов в один. подробнее про SQL_CALC_FOUND_ROWS

High Performance MySQL, Second Edition Вышло 2-ое издание книги High Performance MySQL. Во-первых книга была почти целиком переписана. Во-вторых ее также можно назвать книгой сообщества, поскольку авторы собрали вместе официальные, а также просто используемые сообществом средства, чтобы объяснить на их примере как работает MySQL. Многие из тем также обсуждались в комьюнити: оптимизация и индексирование, масштабируемость, расширенные возможности SQL, производительность. Кроме того, в книге авторы обясняют как писать технические книги.

скачать High Performance MySQL, Second Edition (англ, pdf)

Задача: выбрать 5 случайных активных пользователей из таблицы user
Решение:
SELECT userid, user_name FROM user WHERE activity=1 ORDER BY RAND() LIMIT 5

ORDER BY RAND() - удобная конструкция для выборки случайных записей из таблицы. Она не очень быстрая, но удобная в случае выборки более одной случайной записи, и для небольших таблиц то, что доктор прописал. Для таблицы 20 000 записей вышеприведенный запрос занимает 0.02 с.

Вот такой интересный способ выбора случайной записи встречается иногда :-)

$res = mysql_query(‘SELECT userid, user_name FROM user WHERE activity=1’);
$j = rand(1,mysql_num_rows($res));
$i=1;
while($row=mysql_fetch_array($res)){
    if($i==$j){
        break;
    }
    $i++;
}

Сделали социальную сеть по Ростехнадзору на основе 3-51 за 2 недели. Ресурс создан для общения экспертов по промышленной безопасности, работников Ростехнадзора и МЧС РФ, поставщиков оборудования и всех, кто интересуется вопросами промышленной безопасности.

Теперь вкратце на чем работает сайт:

  1. PHP (ООП)
  2. MySQL (InnoDB)
  3. Perl – отправка почты
  4. шаблонизатор Blitz
  5. библиотека DbSimple – интерфейс к БД
  6. библиотека JsHttpRequest – Ajax (в будущем перейдем на jQuery)

Условия:

  • адреса должны быть активными
  • сбор адресов должен быть автоматизированным
  • количество адресов должно быть достаточным (более 100 000)
  • формат спам-листа: таблица в MySQL

приступаем?