簡體   English   中英

如何在mysql中聲明二級或非唯一索引?

[英]How to declare secondary or non-unique index in mysql?

似乎mysql只提供四種索引,分別是primary,unique,key,fulltext和spatial。 但我想知道如何聲明那些不是唯一但經常被索引的列的索引? 因為我的數據庫服務器遇到了瓶頸,我想為經常編入索引的列創建索引。

任何幫助,將不勝感激。 提前致謝。

請區分“密鑰”和“索引”。

前者是一個邏輯概念(限制,因此改變數據的含義),后者是物理的(不改變含義,但可以改變性能) 1

讓我們直截了當地了解基本概念:

  • “超級鑰匙”是任何一組屬性,它們在一起是唯一的。
  • “候選鍵”(或只是“鍵”)是最小的超級鍵 - 如果你從中獲取任何屬性,它就不再是唯一的。
  • 所有鍵在邏輯上是等價的,但我們選擇其中一個作為實際2和歷史原因的“主鍵”,其余的稱為“備用鍵”。
  • 在數據庫中,使用PRIMARY KEY約束聲明主鍵,使用NOT NULL字段上的UNIQUE約束聲明備用鍵。
  • 大多數DBMS(MySQL也不例外)會自動在鍵下創建索引。 盡管如此,它們仍然是單獨的概念,一些DBMS實際上允許您擁有一個沒有索引的密鑰。

不幸的是,MySQL已經將術語搞砸了:

  • MySQL使用約束KEY作為PRIMARY KEY的同義詞。
  • MySQL使用約束KEY作為索引, 而不是鍵,如果您使用CREATE INDEX語句則相同。

例如,兩者......

CREATE TABLE T (
  A INT PRIMARY KEY,
  B INT
);

CREATE INDEX T_IE1 ON T (B);

...和...

CREATE TABLE T (
  A INT KEY,
  B INT,
  KEY (B)
);

...意思相同:A上的主鍵(A上有唯一/聚簇索引)和B上的非唯一索引。


1獨特的指數在這里是一個古怪的東西 - 它跨越兩個世界一點點。 但讓我們再討論這個問題......

2例如,InnoDB將表格集中在主鍵上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM