Для чего НЕ нужны индексы

Индекс лишним не бывает? Чем больше индексов, тем лучше? А не проиндексировать ли это измерение на всякий случай? Если подобные вопросы иногда возникают в вашей голове, то эту статью прочитать было бы весьма полезно. Итак, традиционное мнение, что "Индекс это хорошо, а блокировка это плохо", часто бывает неверным до противоположности. Картинка выше, которую я выбрал для заголовка статьи, очень часто напоминает многие базы 1С, которые неожиданно начинают "быстро расти"и "тормозить". Но прежде чем перейти к сути, придётся немного покопаться в теории. (далее…)

Выбор и использование индексов MySQL

Первичный индекс

При построении первичного индекса необходимо учитывать несколько факторов:
  • INT + AUTO_INCREMENT - лучший выбор
  • использовать строки - плохо, много места и долгая обработка
  • MyISAM пакует индексы - еще медленнее для строк (до 6 раз)
  • InnoDB включает первичный индекс во вторичные - дополнительное место
  • в InnoDB первичный ключ - кластерный индекс по умолчанию
  • Случайные строки (MD5, SHA1) - медленные выборки и вставка (соседние записи не являются соседними в индексе)
  • Хранение UUID - удалить тире, еще лучше преобразовать в BINARY(16) с помощью UNHEX()
(далее…)

Табличная селективность, индексная селективность , блочная селективность

Табличная селективность или селективность строк – соотношение количества строк, возвращаемых запросом к общему количеству строк в таблице.

Индексная селективность - отношение числа строк соответствующих конкретному ключевому значению к общему числу строк в индексе.
Селективность индекса – это показатель того, сколько строк от общего числа приходится на одно ключевое значение индекса. Построим формулу.
(далее…)

MySQL-индексы для чайников

Прочитав парочку статей, решил собрать их воедино, чтобы получилась по возможности полностью покрывающая данный вопрос статья. Начну с того, что часто вижу ошибки, связанные с созданием индексов в MySQL. Многие разработчики (и не только новички в MySQL) создают много индексов на тех колонках, которые будут использовать в выборках, и считают это оптимальной стратегией. Например, если мне нужно выполнить запрос типа AGE=18 AND STATE='CA', то многие люди просто создадут 2 отдельных индекса на колонках AGE и STATE. (далее…)

Индексирование таблиц MySQL: создание индекса MySQL, удалить индекс и другие операции

От правильно составленной структуры базы данных очень сильно зависит скорость работы всего проекта. Еще одним инструментом, позволяющим значительно сократить время отклика базы, являются индексы БД MySQL. Перед тем, как рассматривать различные операции с ними, стоит определиться, что же такое индексы СУБД и какие преимущества можно получить при их использовании. (далее…)

Оптимизация ORDER BY в запросах с джоинами

Большинство считают, что если ORDER BY происходит по индексу, то и проблем никаких нет, однако это не всегда так. Недавно я разбирался с одним запросом который дико тормозил базу хотя вроде все индексы на нужных местах. ORDER BY оказался последним местом, куда я ткнулся, и проблема оказалась именно там.  Маленькая выдержка из мануалов по оптимизации: === Как MySQL оптимизирует ORDER BY Ниже приведены некоторые случаи, когда MySQLне может использовать индексы, чтобы выполнить ORDER BY Связываются несколько таблиц, и столбцы, по которым делается сортировка ORDER BY, относятся не только к первой неконстантной (const) таблице, используемой для выборки строк(это первая таблица в выводе EXPLAIN, в которой не используется константный, const, метод выборки строк). === Для ORDER BY важно, чтобы таблица, по которой будет производиться сортировка была на первом месте. Однако по умолчанаю, в каком бы порядке вы не джойнили таблицы, встроенный в mysql оптимизатор переставит их в том порядке, как он сам посчитает нужным. То есть если вы поставили нужную таблицу первой в запросе, то это вовсе не означает, что она будет на самом деле первой. К счастью, оптимизатору mysql можно сказать, чтобы он джоинил таблицы в том порядке, какой мы ему указали, для этого нужно в SELECT добавить команду STRAIGHT_JOIN: SELECT STRAIGHT_JOIN… FROM table JOIN…… ORDER BY table.row Проверка на mysql базе форума PHPBB3 содержащей около 300 000 постов: (далее…)

8 регулярных выражений, которые вы должны знать

Регулярные выражения — это собственный язык. Когда вы изучаете новый язык программирования, они — маленький субъязык, на первый взгляд, не имеющий смысла. Вам нужно прочитать не один учебник, статью или книгу, чтобы понять описание «простого» шаблона. Сегодня мы рассмотрим восемь регулярных выражений, которые вы должны знать для своего следующего проекта кодирования. Прежде чем начать, вы можете проверить некоторые из regex apps на Envato Market, таких как: RegEx Extractor Вы можете извлекать электронные письма, прокси, IP-адреса, номера телефонов, Read more

MySQL немного о JOIN’ах

JOIN, в переводе на великий и могучий, означает "объединять", то есть собирать из нескольких кусочков единое целое. В базе данных MySQL такими "кусочками" служат столбцы таблиц, которые можно объединять при выборке. Объединения позволяют извлекать данные из нескольких таблиц без создания временных таблиц и за один запрос. (далее…)

Что такое XPUB, YPUB и ZPUB?

Все мы знаем, что любой биткоин-кошелек имеет два типа адресов – публичный и приватный. Собственно, первый не является управляющим и может использоваться для передачи другим лицам, а второй считается «хранителем» ваших средств и может находится только у вас, ведь он открывает доступ к операциям с вашей криптовалютой. В данной статье мы углубимся еще дальше в технологию адресов и разберемся, что собой представляют XPUB, YPUB и ZPUB. (далее…)

Bash рецепты в macOs

Узнать ip хоста - использовать dig с аргументом +short.

    dig +short unix.stackexchange.com
    host unix.stackexchange.com | awk '/has address/ { print $4 }'
    nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
(далее…)


Любишь мемасики?

Подпишись на мой телеграм-канал!

Открыть
Закрыть