Различия между INDEX, PRIMARY, UNIQUE, FULLTEXT в MySQL?

Другой ответ, возможно, быстрее:)

distribution = [(1, 0.2), (2, 0.3), (3, 0.5)]  
# init distribution  
dlist = []  
sumchance = 0  
for value, chance in distribution:  
    sumchance += chance  
    dlist.append((value, sumchance))  
assert sumchance == 1.0 # not good assert because of float equality  

# get random value  
r = random.random()  
# for small distributions use lineair search  
if len(distribution) < 64: # don't know exact speed limit  
    for value, sumchance in dlist:  
        if r < sumchance:  
            return value  
else:  
    # else (not implemented) binary search algorithm  
574
задан Brian Tompsett - 汤莱恩 24 September 2016 в 09:32
поделиться

2 ответа

Различия

  • КЛЮЧ или ИНДЕКС относятся к нормальному групповому индексу. Неотличные значения для индекса позволяются, таким образом, индекс может содержать строки с идентичными значениями во всех столбцах индекса. Эти индексы не осуществляют ограничений на Ваших данных, таким образом, они используются только для доступа - для того, чтобы быстро достигнуть определенных диапазонов записей, не сканируя все записи.

  • УНИКАЛЬНЫЙ относится к индексу, где все строки индекса должны быть уникальными. Таким образом, та же строка не может иметь идентичных ненулевых значений для всех столбцов в этом индексе как другая строка. А также используясь быстро достигать определенных рекордных диапазонов, Уникальные индексы могут использоваться для осуществления ограничений на данных, потому что система баз данных не позволяет отличному правилу значений быть поврежденным при вставке или обновлении данных.

    Ваша система баз данных может позволить Уникальному индексу быть примененным к столбцам, которые позволяют Нулевые значения, в этом случае двум строкам позволяют быть идентичными, если они оба содержат Нулевое значение (объяснение вот то, что ПУСТОЙ УКАЗАТЕЛЬ считают не равным себе). В зависимости от Вашего приложения, однако, можно найти этого нежелательного: если Вы хотите предотвратить это, необходимо запретить Нулевые значения в соответствующих столбцах.

  • ОСНОВНЫЕ действия точно как Уникальный индекс, за исключением того, что это всегда называют 'ОСНОВНЫМ', и может быть только один на таблице (и должен всегда быть тот; хотя некоторые системы баз данных не осуществляют это). ПЕРВИЧНЫЙ ИНДЕКС предназначается как основные средства для однозначного определения любой строки в таблице, таким образом, в отличие от УНИКАЛЬНОГО это не должно использоваться ни на каких столбцах, которые позволяют Нулевые значения. Ваш ПЕРВИЧНЫЙ ИНДЕКС должен быть на самом маленьком количестве столбцов, которые достаточны для однозначного определения строки. Часто, это - всего один столбец, содержащий уникальное автоувеличенное число, но если существует что-либо еще, что может однозначно определить строку, такую как "код страны" в списке стран, можно использовать это вместо этого.

    Некоторые системы баз данных (такие как InnoDB MySQL) сохранят записи таблицы на диске в порядке, в котором они появляются в ПЕРВИЧНОМ ИНДЕКСЕ.

  • Полнотекстовые индексы отличаются от всего вышеупомянутого, и их поведение значительно отличается между системами баз данных. Полнотекстовые индексы только полезны для полнотекстовых поисков, сделанных с СООТВЕТСТВИЕМ () / ПРОТИВ () пункт, в отличие от вышеупомянутых трех - которые обычно реализуются внутренне с помощью B-деревьев (обеспечение выбора, сортируя или диапазонов, начинающих с крайнего левого столбца) или хеш-таблицы (обеспечение выбора, начинающего с крайнего левого столбца).

    Где другие индексные типы общего назначения, ПОЛНОТЕКСТОВЫЙ ИНДЕКС специализирован, в котором он служит узкой цели: это только используется для функции "полнотекстового поиска".

Общие черты

  • Все эти индексы могут иметь больше чем один столбец в них.

  • За исключением FULLTEXT, порядок столбцов является значительным: чтобы индекс был полезен в запросе, запрос должен использовать столбцы от индекса, запускающегося слева - он не может использовать просто вторую, третью или четвертую часть индекса, если он также не использует предыдущие столбцы в индексе для соответствия статическим значениям. (Чтобы ПОЛНОТЕКСТОВЫЙ ИНДЕКС был полезен для запроса, запрос должен использовать все столбцы индекса.)

648
ответ дан 22 November 2019 в 22:05
поделиться

Все они являются видами индексов.

основной: должно быть уникальным, индекс, (вероятно) физический индекс, может быть только один на таблицу.

уникальный: как это говорит. У Вас не может быть больше чем одной строки с кортежем этого значения. Обратите внимание, что, так как уникальный ключ может быть больше чем по одному столбцу, это не обязательно означает, что каждый отдельный столбец в индексе уникален, но что каждая комбинация значений через эти столбцы уникальна.

индекс: если это не является основным или уникальным, это не ограничивает значения, вставленные в таблицу, но это действительно позволяет им искаться более эффективно.

fulltext: более специализированная форма индексации, которая позволяет полнотекстовый поиск. Думайте о нем как о (по существу) создании "индекса" для каждого "слова" в указанном столбце.

147
ответ дан 22 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: