Kaynağa Gözat

indexes and search

me@helium 8 yıl önce
ebeveyn
işleme
6965f9715a
1 değiştirilmiş dosya ile 25 ekleme ve 0 silme
  1. 25 0
      ER-SQL.md

+ 25 - 0
ER-SQL.md

@@ -143,3 +143,28 @@
 
 Для хранения больших объемов текста существуют типы `TINYTEXT` (255), `TEXT` (65535), `MEDIUMTEXT` (16777216) и `LONGTEXT` (4294967296). Так же эти типы
 предоставляют возможности *полнотекстового поиска* средствами MySQL, в отличии от `CHAR` и `VARCHAR`.
+
+## Индексы
+
+**Индекс** - специальная структура данных, хранящая в себе упорядоченную (сортированную) информацию о данных в полях таблицы. SQL-базы ориентированы на 
+хранение огромных структур данных на медленных носителях (HDD, SSD), сортировать ВСЕ данные которых неоправданно затратно по времени и ресурсам. Более того,
+невозможно иметь один и тот же набор данных отсортированный одновременно по разным критериям, например по фамилии и по дате рождения. Для 
+решения этих задач и существуют индексы - они хранят отсортированные по нужным критериям *ссылки* на записи таблицы.
+
+### Поиск
+Одна из главных задач комьютеров в целом и СУБД в частности - быстрый поиск данных. Реляционные СУБД еще более склонны к этому, так как происходит поиск
+связанных данных из других таблиц. 
+
+#### Поиск в несортированном наборе данных
+Для того, что бы найти определенную запись в наборе из **N** записей требуется до **N** операций сравнения с искомым значением, т. е. поиск перебором. Другими
+словами, такой поиск имеет вычислительную сложность **O(n)**, и время на него пропорционально **N**.
+
+#### Поиск в сортированном наборе данных.
+Для поиска в сортированном наборе данных обычно применяется двоичный поиск. Этот несложный алгоритм позволяет радикально уменьшить вычислительную сложность
+поиска до **O(log2(N))**, то есть для **N** = 1000 записей надо 10 сравнений, а для **N** = 2000 всего 11, **N** = 4000 - 12 сравнений.
+
+**Наличие индекса превращает несортированный набор данных в сортированный, уменьшая время запросов к СУБД**. MySQL может искать данные и без индексов, однако
+на больших наборах данных проще вначале создать индекс (его можно добавить в любой момент, не только когда таблица создается), а потом выполнять запросы
+поиска данных.
+
+