MySQL單列索引和聯合索引
阿新 • • 發佈:2019-02-06
所有的MySQL列型別能被索引。在相關的列上的使用索引是改進SELECT操作效能的最好方法。
一個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯MySQL時被改變。
對於CHAR和VARCHAR列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁碟空間。在CREATE TABLE語句中索引列字首的語法看起來像這樣:
KEY index_name (col_name(length))
下面的例子為name列的頭10個字元建立一個索引:
對於BLOB和TEXT列,你必須索引列的字首,你不能索引列的全部。
多列索引
MySQL能在多個列上建立索引。一個索引可以由最多15個列組成。(在CHAR和VARCHAR列上,你也可以使用列的字首作為一個索引的部分)。
一個多重列索引可以認為是包含通過合併(concatenate)索引列值建立的值的一個排序陣列。
當你為在一個WHERE子句索引的第一列指定已知的數量時,MySQL以這種方式使用多重列索引使得查詢非常快速,即使你不為其他列指定值。
假定一張表使用下列說明建立:
那麼索引name是一個在last_name和first_name上的索引,這個索引將被用於在last_name或last_name和first_name的一個已知範圍內指定值的查詢,因此,name索引將使用在下列查詢中:
然而,name索引將不用在下列詢問中:
摘自: http://www.sphinxsearch.org/node/26
一個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯MySQL時被改變。
對於CHAR和VARCHAR列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁碟空間。在CREATE TABLE語句中索引列字首的語法看起來像這樣:
KEY index_name (col_name(length))
下面的例子為name列的頭10個字元建立一個索引:
- CREATE TABLE test (
- name CHAR(200) NOT NULL,
- KEY index_name (name(10)));
對於BLOB和TEXT列,你必須索引列的字首,你不能索引列的全部。
多列索引
MySQL能在多個列上建立索引。一個索引可以由最多15個列組成。(在CHAR和VARCHAR列上,你也可以使用列的字首作為一個索引的部分)。
一個多重列索引可以認為是包含通過合併(concatenate)索引列值建立的值的一個排序陣列。
當你為在一個WHERE子句索引的第一列指定已知的數量時,MySQL以這種方式使用多重列索引使得查詢非常快速,即使你不為其他列指定值。
假定一張表使用下列說明建立:
-
CREATE
- id INT NOT NULL,
- last_name CHAR(30) NOT NULL,
- first_name CHAR(30) NOT NULL,
- PRIMARY KEY (id),
- INDEX name (last_name,first_name));
那麼索引name是一個在last_name和first_name上的索引,這個索引將被用於在last_name或last_name和first_name的一個已知範圍內指定值的查詢,因此,name索引將使用在下列查詢中:
- SELECT * FROM test WHERE last_name=”Widenius”;
- SELECT * FROM test WHERE last_name=”Widenius”
- AND first_name=”Michael”;
- SELECT * FROM test WHERE last_name=”Widenius”
- AND (first_name=”Michael” OR first_name=”Monty”);
- SELECT * FROM test WHERE last_name=”Widenius”
- AND first_name >=”M” AND first_name < "N";
然而,name索引將不用在下列詢問中:
-
SELECT * FROM
- SELECT * FROM test WHERE last_name=”Widenius”
- OR first_name=”Michael”;
摘自: http://www.sphinxsearch.org/node/26