Finding out largest tables on MySQL Server

Finding largest tables on MySQL instance is no brainier in MySQL 5.0+ thanks to Information Schema but I still wanted to post little query I use for the purpose so I can easily find it later, plus it is quite handy in a way it presents information:

SELECT concat(table_schema,'.',table_name),concat(round(table_rows/1000000,2),'M') rows,concat(round(data_length/(1024*1024*1024),2),'G') DATA,concat(round(index_length/(1024*1024*1024),2),'G') idx,concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,round(index_length/data_length,2) idxfrac FROM information_schema.TABLES ORDER BY data_length+index_length DESC LIMIT 10;

http://www.mysqlperformanceblog.com/2008/02/04/finding-out-largest-tables-on-mysql-server/

Оптимизация работы с MySQL

Ни для кого не секрет, что работа с базой данных занимает большую часть работы практически любого сайта. И именно работа с БД чаще всего является узким местом веб-приложений.
В этой статье хотелось бы дать практические советы использования MySQL.
Сразу оговорюсь:

  • данная статья написана про MySQL, хотя общие вещи скорее всего справедливы для любой СУБД.
  • все написанное в статье является моей личной точкой зрения, и не является истиной в последней инстанции.
  • советы не претендуют на новизну и являются результатом обобщения прочтенной литературы и личного опыта.
  • в рамках данной статьи я не буду касаться вопросов конфигурирования MySQL.

Проблемы при использовании MySQL можно разделить на следующие три группы(в порядке значимости):

  1. Неиспользование или неправильное использование индексов.
  2. Неправильная структура БД.
  3. Неправильные \ неоптимальные SQL запросы. Read the rest of this entry »

Случайная сортировка

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

SELECT * FROM my_table ORDER BY RAND()

Проблема в том, что такая сортировка зачастую вовсе не нужна для всей выборки - хочется просто достать случайный элемент из определённого множества, к тому же ORDER BY RAND() достаточно медленный выход из ситуации. Можно попробовать делать выборку основываясь на числе элементов в целом и функции RAND():

SELECT name FROM my_table JOIN (
SELECT CEIL(RAND() * (
SELECT MAX(id) FROM my_table
)) AS randomID
) AS random_table ON random_table.randomID=my_table.ID

На 50000 рядов такой запрос занимает 0.00086 сек.. Сравните с 1.56356 сек обычного варианта ORDER BY RAND().

Proxy для MySQL (и не только)

  1. SQL Relay. SQL Relay is a persistent database connection pooling, proxying and load balancing system for Unix and Linux.
  2. MySQL Proxy.  The MySQL Proxy is an application that communicates over the network using the MySQL Network Protocol and provides communication between one or more MySQL servers and one or more MySQL clients. In the most basic configuration, MySQL Proxy simply passes on queries from the client to the MySQL Server and returns the responses from the MySQL Server to the client.
  3. PL/Proxy. PL/Proxy is database partitioning system implemented as PL language.
  4. SQLB : SQL Load Balancer. The SQLB project is used to improve SQL requests to a database. It supports MySQL, PostgreSQL and Oracle(tm). It is a set of deamon programs that make multiple permanent connection to one or more database when they start. Then an external program, previously linked with the sqlb client library, can send SQL requests to these deamons and get the result without any need to make a connection/disconnection. The SQLB PHP and Perl modules provided here with SQLB are some examples of such programs.

GUI средства для работы с MySQL

mysql_100x52-64.gifКак и любому разработчику мне часто приходится работать с базами данных. Причем консоль не такой уж и удобный инструмент для быстрой работы.  Даже простой просмотр результатов запроса иногда превращается в головную боль. Вот здесь на помощь и приходят различные штукенции, облегчающие жизнь девелопера.

Итак, существующие инструменты:

  1. SQL-Front - страшно глючный, но в то же время удивительно удобный. Является продолжение хита всех времен и народов MySQL-Front 2.0.  Из-за глючность товарищи из MySQL настояли вначале на переименовании продукта в SQL-Front, а затем попросили и вовсе прекратить разработку… Но, ОНИ вернулись, качаем свежую версию (shareware)
  2. SQLyog - очень неплохой продукт…. когда-то я его ненавидел, а сейчас ничего так :)  Более того, имеется бесплатная Community Edition.  (shareware/freeware)
  3. Toad for MySQL - ну какой любитель Oracle не узнает это квакающее животное :)  Но у них есть версия и для MySQL, причем совершенно бесплатная (freeware)
  4. MySQL GUI Tools - набор от производителя (freeware)
  5. EMS SQL Manager for MySQL - очень добротный продукт, но я всегда считал его слишком “тяжелым”, нет в нем легкости SQL-front’a  :)  (shareware)
  6. HeidiSQL - вот оно счастье! Реинкарнация MySQL-Front !!! (freeware/donateware)
  7. phpMyAdmin - ну куда ж без него родного… как по мне, то это как бы не совсем GUI… хотя некоторые без него жить не могут (freeware/donateware)
  8. MySQL Quick Admin - облегченный phpMyAdmin (freeware/donateware)

продолжение следует…