Здравствуйте, насколько я помню, PHP-программист брал интервью у автора серии письменных экзаменационных книг.
135 обновлений на этой неделе (с 4 по 3.8 марта 2019 года) выглядят следующим образом:
Понедельник: PHP Интервью Базовые знания базы данных MySQL Среда: PHP интервью Индекс базы данных MySQL Пятница: PHP Интервью Темы интервью с базой данных MySQL
Я сам организовал пьесу.” Каковы преимущества и недостатки индекса и принципы его использования? “Обратите внимание на общедоступный номер:” Библиотека программирования Рюэйи “Ответ:” Индексы Я пришлю его вам.
Следующие разделы взяты из Тестовой книги для интервью с PHP-программистом Если вам нужно воспроизвести, пожалуйста, укажите источник.
Индекс-это отдельная физическая структура хранения, которая сортирует значения одного или нескольких столбцов в таблице базы данных. Это набор значений одного или нескольких столбцов в таблице и список логических указателей, указывающих на страницы данных в таблице, которые физически идентифицируют эти значения. Функция индекса эквивалентна каталогу книг. Он может быстро найти необходимый контент в соответствии с номером страницы в каталоге. В основном он предоставляет указатели на значения данных, хранящиеся в указанных столбцах таблицы, а затем сортирует их в соответствии с указанным порядком сортировки. База данных использует индекс для поиска определенного значения, а затем находит строку, содержащую это значение, вдоль указателя. Это позволяет ускорить выполнение инструкций SQL, соответствующих таблицам, и обеспечивает быстрый доступ к определенной информации в таблицах базы данных. Характеристики индекса следующие: Он может повысить скорость поиска базы данных; снизить скорость вставки базы данных,
Классификация и использование индексов следующие: 1. Прямое создание индекса и косвенное создание индекса Создайте индекс напрямую: СОЗДАЙТЕ ИНДЕКС mycolumn_index В mytable (myclumn). Создание косвенного индекса: Определение ограничений первичного ключа или ограничений уникального ключа для создания косвенных индексов.
2. Общий индекс и уникальный индекс Общий индекс: СОЗДАЙТЕ ИНДЕКС mycolumn_index В mytable (столбец mycolumn). Индекс уникальности: Убедитесь, что все данные в столбце индекса уникальны и могут использоваться как для кластеризованных, так и для некластеризованных индексов. СОЗДАЙТЕ УНИКАЛЬНЫЙ СЧЕТЧИК ИНДЕКСА my column_index В mytable(mycolumn)
3. Единый индекс и составной индекс Индивидуальный индекс: Несоставной индекс. Составной индекс: также известный как составной индекс, который включает в себя несколько имен полей и до 16 полей в инструкции построения индекса.
CREATE INDEX name_index ON username(firstname,lastname)
4. Кластерный индекс и Некластерный индекс (Кластерный индекс, Кластерный индекс) Кластерный индекс: Физический индекс, тот же физический порядок, что и в базовой таблице, порядок значений данных всегда в порядке. СОЗДАЙТЕ столбец КЛАСТЕРИЗОВАННОГО индекса_index В mytable(столбец mycolumn) С ПОМОЩЬЮ ALLOW_DUP_ROW (Индекс кластера, позволяющий дублировать записи)
Некластеризованный индекс: СОЗДАЙТЕ столбец КЛАСТЕРИЗОВАННОГО индекса_index В mytable(mycolumn).
Цель индексирования-повысить эффективность запроса, который аналогичен каталогу, который мы используем для ссылок на книги: сначала найдите главу, затем найдите раздел под главой, а затем найдите количество страниц. Подобные примеры включают: поиск словарей, поездки на поезде, рейсы авиакомпаний и т. Д.
По сути: постоянно сужая объем данных, которые мы хотим получить, мы можем отфильтровать конечные желаемые результаты и превратить случайные события в последовательные события. Другими словами, с помощью этого механизма индексирования мы всегда можем блокировать данные одним и тем же способом.
База данных такая же, но, очевидно, более сложная, потому что она сталкивается не только с эквивалентным запросом, но и с запросом диапазона ( > ,<, между, в), нечетким запросом (например), запросом объединения (или) и так далее. Как база данных должна решать все проблемы? Давайте вспомним пример со словарем. Можем ли мы разделить данные на сегменты, а затем запросить их по сегментам? Самый простой способ-разделить от 1 до 100 в первом абзаце, от 101 до 200 во втором абзаце и от 201 до 300 в третьем абзаце…. Таким образом, вы можете просмотреть 250 данных, просто найдите третий абзац и сразу удалите 90% недействительных данных. Но если это рекорд в 10 миллионов, на сколько сегментов было бы лучше разделить его? Средняя сложность дерева поиска составляет lgN, что обеспечивает хорошую производительность запросов. Но здесь мы упускаем из виду ключевую проблему. Модель сложности основана на одних и тех же эксплуатационных затратах каждый раз. Реализация базы данных является сложной задачей. С одной стороны, данные хранятся на диске. С другой стороны,
Я сам организовал пьесу.” Каковы преимущества и недостатки индекса и принципы его использования? “Обратите внимание на общедоступный номер:” Библиотека программирования Рюэйи “Ответ:” Индексы Я пришлю его вам.
Любая структура данных не создается из воздуха, у нее должны быть свои предпосылки и сценарии использования. Теперь мы подытожим, для чего нам нужна эта структура данных. На самом деле, это очень просто. То есть, каждый раз, когда мы ищем данные, мы должны контролировать количество операций ввода-вывода на диске в очень малом порядке, предпочтительно в постоянном порядке. Затем мы задаемся вопросом, может ли сильно управляемое многопутевое дерево поиска удовлетворить спрос. Таким образом, возникло дерево B+.
Как показано выше, это дерево B +. Для определения дерева B + мы можем обратиться к дереву B +. Здесь мы говорим только о некоторых ключевых моментах. Светло-голубые блоки называются дисковыми блоками. Мы видим, что каждый дисковый блок содержит несколько элементов данных (показано темно-синим цветом) и указатели (показаны желтым цветом). Например, дисковый блок 1 содержит элементы 17 и 35 данных, включая указатели P1, P2, P3, P1 представляет дисковый блок меньше 17, а P2 представляет дисковый блок меньше 17. Между 17 и 35, P3 представляет собой дисковый блок размером более 35. Истинные данные существуют в конечных узлах 3, 5, 9, 10, 13, 15, 28, 29, 36, 60, 75, 79, 90, 99. Не-конечные узлы не хранят реальные данные, только элементы данных, которые определяют направление поиска, такие как 17 и 35, на самом деле не существуют в таблице данных.
Процесс поиска по дереву B +
Как показано на рисунке, если вы хотите найти элемент данных 29, вы сначала загрузите дисковый блок 1 с диска в память, а затем произойдет ввод-вывод. В памяти двоичный поиск используется для определения 29 между 17 и 35. Указатель P2 дискового блока 1 заблокирован. Время памяти незначительно, потому что оно очень короткое (по сравнению с вводом-выводом диска). Дисковый блок 3 загружается с диска по адресу диска указателя P2 дискового блока 1. В память происходит второй ввод-вывод 29 между 26 и 30, блокируется указатель P2 дискового блока 3, загружается дисковый блок 8 в память через указатель, и происходит третий ввод-вывод. В то же время выполните двоичный поиск в памяти, чтобы найти 29, завершите запрос, всего три iOS. Реальная ситуация такова, что трехуровневое дерево B + может представлять миллионы данных. Если для миллионов поисков данных потребуется всего три iOS, повышение производительности будет огромным. Если индекса нет, для каждого элемента данных требуется один ввод-вывод, то в общей сложности требуются миллионы iOS, очевидно, что стоимость очень высока.
Свойства дерева B+
1. Поля индекса должны быть как можно меньше: Из приведенного выше анализа мы знаем, что количество IO зависит от высоты h числа b+. Предполагая, что текущая таблица данных равна N, а количество элементов данных на дисковый блок равно m, существует h= (m+1)N. Когда объем данных N фиксирован, чем больше m, тем меньше h; и размер дискового блока/элемента данных, размер дискового блока, то есть размер страницы данных, фиксирован, если чем меньше пространство, занимаемое элементами данных, тем больше количество элементов данных и тем меньше высота дерева. Вот почему каждый элемент данных, то есть поле индекса, должен быть как можно меньше. Например, int занимает 4 байта и вдвое меньше, чем bigint 8 байт. Вот почему дерево B + требует, чтобы реальные данные размещались в конечных узлах, а не во внутренних узлах. После размещения во внутренних узлах элементы данных дисковых блоков резко уменьшатся, что приведет к увеличению дерева. Когда элемент данных равен 1, он вырождается в линейную таблицу. 2.
Обратите внимание: В эту пятницу (3.8) будут обновлены вопросы для интервью в базе данных PHP interview MySQL. Пожалуйста, с нетерпением ждите этого.
Выше приведены выдержки из Интервью с PHP – программистом, Написанного в Тестовой книге Книги, в настоящее время не существует электронной версии книги, можно приобрести на основных платформах электронной коммерции в бумажной версии.
Дополнительные знания о собеседовании и экзаменационные вопросы, связанные с PHP, могут быть связаны с приобретением общедоступного номера: Библиотека программирования Ryueyi
Любые вопросы или предложения в этой статье можно оставить в сообщении, я буду продолжать совершенствовать стремление к конечному, спасибо за вашу поддержку.