帳號登錄
帳號:
密碼:
記住我 | 忘記密碼 | 帳號註冊
網站導覽
模組開發 : MYSQL 索引
作者 elie 於 2010年08月12日 21:50:00 (8047 次閱讀)

原始出處 http://www.xoops.org/modules/mediawiki/index.php/Dev:MYSQL_indexes

 

使用資料庫索引(index)可以加快資料查詢速度。如果沒有索引的話,MYSQL 就必須從表格第一行開始讀取然後讀完整個表格找出相關的資料。越大的表格等待的時間就越久。使用索引的話,MySQL 就可以很快的決定開始查詢的位置而不必找整個表格。這樣子可以減少許多查詢時間,也就是代表你的網頁可以更快的出現。

何時使用索引

索引可以增加SELECT 查詢找出符合WHERE 條件式與ORDER BY 子句的效能。如果主鍵是子句中唯一欄位的話你就不需要使用索引了,表格會預設依主鍵排序。如果你多數的時候是查詢一個非主鍵的欄位或是多個欄位的話,或許你就應該考慮使用索引了。

使用哪些欄位做為索引

使用索引時先想到最常在查詢式中使用到的欄位,並且先為這些欄位做索引。

舉例來說如果col_3 是查詢最常使用的欄位的話就要使用CREATE INDEX example_index (col_3);。

如果最常查詢某個欄位加上其他欄位的話,也將那些其他的欄位做索引,將那些其他的欄位做為索引的其他鍵值。

舉例來說CREATE INDEX example_index (col_3, col_5, col_6);。

建立索引鍵值時最常使用的欄位應該放在左邊,讓相同的索引可以做為部分鍵(patial key)。舉例來說,上面的例子的索引可以是(col_3),(col_3 and col_5)與(col_3, col_5 and col_6)。

所以SELECT * FROM example_table WHERE col_3=val1 AND col_5=val2; 就會使用到索引。

而SELECT * FROM example_table WHERE col_6=val; 不會使用到索引,因為col_6 不符合索引的最左邊鍵值。

使用索引的缺點

MySQL 將原始資料與索引資料存放在不同的檔案。所以當你新增索引都會增加資料庫的檔案大小。分開儲存可以加快資料取得,但是當使用INSERT、UPDATE,或DELETE 敘述句更改資料庫時會減緩資料儲存。

所以在建立索引前仔細考慮是否會經常使用這個索引,並且建立你真正需要使用的索引。

建立一個索引的資料表

在mysql.sql 檔案中你可以同時建立表格與索引。MySQL 可以使用兩種指令建立索引:KEY 與INDEX。這兩種指令有相同的功能。

範例:

CREATE TABLE `example_table` (

   `eg_id` int(12) unsigned NOT NULL auto_increment,

   `eg_integer` int(10) unsigned NOT NULL default '0',

   `eg_string` char(100) NOT NULL default ,

   `eg_date` int(12) unsigned NOT NULL default '0',

   PRIMARY KEY (`eg_id`),

   KEY `eg_date` (`eg_date`,`eg_string`),

   KEY `eg_integer` (`eg_integer`)

) TYPE=MyISAM;

CREATE TABLE `example_table` (

   `eg_id` int(12) unsigned NOT NULL auto_increment,

   `eg_integer` int(10) unsigned NOT NULL default '0',

   `eg_string` char(100) NOT NULL default ,

   `eg_date` int(12) unsigned NOT NULL default '0',

   PRIMARY KEY (`eg_id`),

   INDEX `eg_date` (`eg_date`,`eg_string`),

   INDEX `eg_integer` (`eg_integer`)

) TYPE=MyISAM;

 

所有類型的欄位都可以做索引,但是當對BLOB 或TEXT 類型的欄位做索引時你必須標示長度。舉例來說:

CREATE TABLE test (

   text_col text,

   INDEX (text_col(10))

) TYPE=MyISAM;

為已存在的表格做索引

例如:

ALTER TABLE example_table

   ADD INDEX [index_name] (index_col_name,...)


參考:

MySQL Documentation:

Column Indexes

Multiple-Column Indexes

How MySQL Uses Indexes


可列印模式 轉寄給朋友

The XOOPS organisation ("XOOPS") is committed to protecting the privacy of users of the XOOPS.org sites.
The website used Ver.2.4.5 POWERED BY XOOPS PROJECT.