Мастер-класс по MySQL Андрей Великанова
Мастер-класс по MySQL Андрей Великанова
Рассказываю из личного опыта из того же SoooFast'а и прочих скриптов буксов.

1. Проектируйте сначала свою базу данных, а потом уже делайте.

2. Старайтесь не использовать varchar, используйте ENUM, который столбцы типа ENUM работают быстрее и компактнее.

3. Так-же заметил, все хранят IP в varchar (15), даже не думая, что будут хранить в этом поле целочисленное значение. Если использовать INT, то размер поля сократится до 4 байт, и оно будет иметь фиксированную длину.

Нужно использовать тип UNSIGNED INT, так как IP адрес задействует все 32 бита беззнакового целого.

В запросах можно использовать функцию INET_ATON() для конвертации IP адреса в целое, и INET_NTOA() для обратного процесса. Также есть схожие функции PHP: ip2long() и long2ip().

4. Если выполняете большие запросы delete или insert, то разделяйте их, допустим, паузой: usleep(50000);

5. Если у вас в БД храниться дата, то не храните её в varchar (10) и т.д., а храните в DATE.

6. Храните свои пароли всегда в MD5. Это признак хорошего тона, защиты и экономия место в базе, т.к. начиная с MySQL 5.5.15 ввели специальный тип MD5. Т.е. теперь хеш пароли не надо хранить в varchar (32), а в md5, что является огромным плюсом.

7. Не используйте драйвер для работы с базой MySQL, т.к. он устарел его уже пора пометить как depricated, что и будет сделано начиная с php 5.5, а с выходом php6 прекратят его поддержку, и с выходом MySQL 6, как обещают нам разработчики, к маю месяцу с сокета MySQL демона будет снят MySQL и останется MySQLi. Используйте либо mysqli или pdo.

8. Не используйте mysqli_fetch_array, используйте всегда mysqli_fetch_assoc, он быстрее, так же mysqli_fetch_array давно пора пометить как deprecated.

9. Поговорим о типах таблиц.

Старайтесь уже переходить с MYISAM, которого не будет в MYSQL 6, он будет заменен полностью на Falcon и Aria.

Myisam - это самое слабое место MYSQL, при высоких нагрузках большим таблицам типа MYISAM свойственно крошиться и довольно трудоёмко и долгоёмко бывает восстановление таблицы, чего нет в ARIA, которые более устойчивы к нагрузкам и быстро и легко-восстанавливаемые.

P.S. Myisam быстрее на простых выборках. Если есть нагружающие выборки по большим текстовым полям, то fulltext индекс myisam будет много быстрее, чем like по innodb. Это всё довольно общие характеристики и в конкретных случая могут изменяться, но в целом так и есть: Myisam быстрее, чем innodb.

А насчет ARIA VS MYISAM - производительность абсолютно одинаковая.

10. Старайтесь динамические таблицы напрямую держать в оперативной памяти (из которых не жалко потерять инфу), в типе таблиц MEMORY. В суфасте, например, таблицу user_online можно спокойно держать в типе MEMORY, а не в Myisam, что будет давать запросы не к базе данных, а напрямую к оперативной памяти (и не надо кешировать, всё будет в реальном времени).

11. Таблицы больших объёмов я рекомендую держать в INNODB, но при этом должна быть включена директива big_table, в суфасте таблицу tb_ads я держу в innodb и не смотря на её огромные объёмы и кучу к ней запросов, она не разу не крашнулась и работает как часы.

12. Старайтесь всегда использовать id.

13. Не забывайте расставлять индексы и уникальные значения.

14. Старайтесь держать всё тютя в тютю если максимальная длинная кошелька 12 символов, то не надо его хранить в varchar (255) достаточно будет varchar (12).

15. Так же все используют для того же рандомного вывода баннеров ORDER BY RAND() даже не подозревая, что RAND(), занимающая время процессора для каждой отдельной строки в таблице перед тем, как отсортировать ее и выдать вам только одну строку.

Вот так будет лучше:
$r = $mysqli->query("SELECT count(*) FROM banner");
$d = mysqli_fetch_row($r);
$rand = mt_rand(0,$d[0] - 1);
$r = $mysqli->query("SELECT username FROM banner LIMIT $rand, 1");

16. Не создавайте лишних запросов не забывайте про JOIN и UNION.

17. Вам не подходит JOIN и UNION и вам кажется, что 2 запроса никак не сделать в 1? Не беда, вы, наверное, забыли про MYSQL триггеры.

18. Начиная с MySQL 5.1 запросы можно кешировать со стороны MySQL.

Т.е. запросы, которые выполнялись к базе, они больше не выполняются, а просто отдаётся из оперативной памяти (спасибо разработчикам MySQL за внедрённую фичу). Это делается директивой: query_cache_size=32M - где 32М кол-во мегабайт ОЗУ, которое вы выделил для кеширования запросов MySQL, прописывается в конфиге мускула my.cnf в секции [mysqld]

19. Ну и напоследок, не используйте MySQL напрямую, старайтесь всё кешировать, это может быть как собственный кеш (кешировать результат запросов в файл и отдавать веб сервером), так и более мощные вещи, такие как memcache(d) или Redis.


Рубрика: Информация » Программирование   |   Автор: VELIK505   |   Просмотры: 6559
Комментариев: 78
Публикаций: 2
ICQ: 438544012
- 123 +
  Автор: finbux.info   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
вел спасибо плюсанул,

все знал кроме
4. Если выполняете запросы delete или insert то разделейте их, допустим паузой:
usleep(50000);

для чего это ?
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Потому что если большой запрос он может заблочить таблицы

Я много чё из книги взял которая на скрине я её читал 2 части. Книга Петра Зайцева нашего Российского гуру по Mysql
Комментариев: 0
Публикаций: 0
ICQ: --
- 0 +
  Автор: Hamit   |   Группа: Гости   |   Дата: 02 декабря 2011  
Хорошая статья. Жаль я ничего не понимаю в этом)
Комментариев: 64
Публикаций: 8
ICQ: 959098
- 82 +
  Автор: kirill   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Ну во первых ENUM Работает для свитчей / переключателей типа А
1 / 2 или yes / no
Остальное значение типа Б varchar (15) или char (15) ты уже не запишешь в ячейку ENUM!

Пример неправильного значения:


Пример правильного значения:


В конечном итоге мы получим переключатель: 3.JPG

Для оптимального использование varchar и альтернативной замене которая в разы быстрей работает и записывает все значение в 1 файл грубо говоря
char с фиксированной длиной записи

MEMORY тип таблицы
Не рекомендуется использовать для важных значений допустим список динамических ссылок так как данный тип таблицы будет обнулен при перезапуски домена

Насчет Redis скоро будет вам статейка я или Андрей напишет
Комментариев: 217
Публикаций: 14
ICQ: 207679
- 318 +
  Автор: vlaf   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
велик молодец как всегда)
Комментариев: 150
Публикаций: 8
ICQ: --
- 80 +
  Автор: PHPmaster   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
молодец!все на высшем уровне
Комментариев: 78
Публикаций: 2
ICQ: 438544012
- 123 +
  Автор: finbux.info   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
да в enum лучше числами работать так быстрее
Комментариев: 217
Публикаций: 14
ICQ: 207679
- 318 +
  Автор: vlaf   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
finbux.info,
а int чем плох?
Комментариев: 78
Публикаций: 2
ICQ: 438544012
- 123 +
  Автор: finbux.info   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
enum как кирил писал для свичи
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Я и писал про мемори что незначительное надо хранить что не жалко потерять.
А про REDIS я жду от тебя=))) fellow
Комментариев: 64
Публикаций: 8
ICQ: 959098
- 82 +
  Автор: kirill   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Цитата: VELIK505
А про REDIS я жду от тебя=)))

На днях займусь
Комментариев: 207
Публикаций: 5
ICQ: 403746846
- 339 +
  Автор: BaMiS   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
Круто. Скажем так. Половину знал. А половине вещей догадывался что надо делать так, но не знал почему. А вот некоторые пункты для меня оказались важными.
В статье очень понравилось что тут нет воды. Не малое количество книг по программированию написаны как художественные тексты(именно из-за этого до конча не выучил C++). Тут всё написано чётко,понятно и без лишнего.
Все ключевые слова выделены, и понятно на что важно особо обратить внимание.
Эта статья - одна из немногих за последний год которая написана действительно хорошо и за такую статью не жалко монетку автору кинуть(правда больше 50рублей вряд ли смогу, щас с деньгами не очень)

В целом статья написана на 5+ и побольше бы таких статей мне попадалось
Комментариев: 60
Публикаций: 2
ICQ: 3374475
- 107 +
  Автор: FreeWolfAlex   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Велик что то ты муть протолкнул про тип ENUM belay
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Нет не проткнул муть. Щас на самом деле всё что у тебя в varchar можно хранить в enum
если таблицы в типе ARIA.
Просто MYISAM устарел и тяжело объяснить возможности новых типов таблиц так как мало кто видел чёто дальше чем INODB.
Даже можешь посмотреть вот тут сравнения
http://www.mysqlperformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joi

ned-table-what-is-faster/
ENUM по скорости превосходит VARCHAR полностью!
Я даже читал что когда у Фейсбука Mysql использовался у них не было varchara всё в enum.
Ну единственное что всё-таки тут Кирилл внёс поправки грамотные к такому варианту предлагаю склоняться.

BaMiS
Эта статья - одна из немногих за последний год которая написана действительно хорошо и за такую статью не жалко монетку автору кинуть(правда больше 50рублей вряд ли смогу, щас с деньгами не очень)


Спасибо за тёплые слова. Но мне денег не надо. Я искрене хочу помочь людям
Комментариев: 95
Публикаций: 0
ICQ: 471590730
- 189 +
  Автор: reklamawmb   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
Велик, в бд где это возможно varchar сменить на ENUM?
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
в phpmyadmin можно. Какая версия Mysql сервера?
Комментариев: 95
Публикаций: 0
ICQ: 471590730
- 189 +
  Автор: reklamawmb   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
Сама древность 5.0.37
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
Я незнаю если там вообще enum но знаю точно что много возможностей в ней ещё нет.
Я стараюсь следить за софтом у меня щас самая последняя 5.5.18
Всё самое интересно по крайней мере с 5.1 началось всё что до этого это чушь и тот же mysql 5.1 работает на много медленне чем 5.5

PS. Забыл немного дописал про сравнение таблиц в статье.
Комментариев: 95
Публикаций: 0
ICQ: 471590730
- 189 +
  Автор: reklamawmb   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
я сейчас новый апач скачал. сейчас поставлю
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 02 декабря 2011  
2.2.21 или бету новее?
Комментариев: 95
Публикаций: 0
ICQ: 471590730
- 189 +
  Автор: reklamawmb   |   Группа: Пользователи   |   Дата: 02 декабря 2011  
2.2.2 но он пхп открывает как блокнот(

VELIK505,
Я тебя с хамитом по аве спутал.. думаю черезчур хамит умничает в пхп=)))

Как мне сделать 15 пункт с этим вот

Комментариев: 0
Публикаций: 0
ICQ: --
- 0 +
  Автор: Hamit   |   Группа: Гости   |   Дата: 02 декабря 2011  
Цитата: reklamawmb
Я тебя с хамитом по аве спутал

Как можно было спутать такие разные авы facepalm wink
Цитата: reklamawmb
думаю черезчур хамит умничает в пхп=)))

lol
Комментариев: 27
Публикаций: 0
ICQ: 264441456
- 56 +
  Автор: lemax   |   Группа: V.I.P.   |   Дата: 03 декабря 2011  
Ну ты молодцом. Как не знающий winked
Комментариев: 78
Публикаций: 2
ICQ: 438544012
- 123 +
  Автор: finbux.info   |   Группа: Пользователи   |   Дата: 03 декабря 2011  
вел насчет rand в интернете искал, и способ что у меня в скрипте в палбике самый быстрый из всех, посмотри оцени,

когда нашел там были все типы запросы для выводо случайной строки, и тот что у меня что я взял с нета самый быстрый, можешь тут добавить
Комментариев: 738
Публикаций: 50
ICQ: --
- 4 +
  Автор: Green-wm   |   Группа: Пользователи   |   Дата: 03 декабря 2011  
" Мастер-класс" - не сильно ли круто для небольшой статьи?
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 03 декабря 2011  
Green-wm
" Мастер-класс" - не сильно ли круто для небольшой статьи?

Имеются знания по круче? Напиши с удовольствием почитаю
Комментариев: 738
Публикаций: 50
ICQ: --
- 4 +
  Автор: Green-wm   |   Группа: Пользователи   |   Дата: 03 декабря 2011  
Цитата: VELIK505
Имеются знания по круче? Напиши с удовольствием почитаю

Причём тут знания? Я про названия статьи.
Комментариев: 240
Публикаций: 6
ICQ: 573235722
- -896 +
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 03 декабря 2011  
Да нет название само то wink
Комментариев: 137
Публикаций: 3
ICQ: 641954255
- 165 +
  Автор: sifon   |   Группа: Пользователи   |   Дата: 03 декабря 2011  
Полезно! Спасибо
Комментариев: 95
Публикаций: 0
ICQ: 471590730
- 189 +
  Автор: reklamawmb   |   Группа: Пользователи   |   Дата: 03 декабря 2011  
как поставить тип таблицы Falcon или Aria.
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.