中索引的设计和使用
下面讨论下
MySQL5.0
中的索引的设计和使用。任何东西设计的好,那么使
用起来就顺手。
不过很多时候给出设计什么规则这些都是相对的。
做任何的事情,
最重要的是能否根据当时情况就合理的调整你的设计。
如果你只会看着书本或者
权威来死套什么设计理念来进行实际的开发和设计的话,
那么我请你还是少读书
为妙。
索引是数据库中用来
提高性能
的常用工具。
(注意如果要优化数据库的性能,
这
是一个点)。
所有
MySQL
列类型都可以被索引,对相关列使用索引是提高
SELECT
操作性能
的最佳途径。
根据存储引擎可以定义每个表的最大索引数和最大索引长度,
每种
存储引擎
(MyISAM
、
InnoDB
、
BDB
、
MEMORY
等
)
对每个表至少支持
16
个索引,总
索引长度至少为
256
字节。大多数存储引擎有更高的限制。
MyISAM
和
InnoDB
存储引擎的表默认创建的都是
BTREE
索引。
MySQL
目前还不
支持函数索引,
但是支持前缀索引,
即对索引字段的前
N
个字符创建索引。
前缀
索引的长度跟存储引擎相关,对于
MyISAM
存储引擎的表,索引的前缀长度可以
达到
1000
字节长,而对于
Inn0DB
存储引擎的表,索引的前缀长度最长是
767
字节。请注意前缀的限制应以字节为单位进行测量,而
CREATE TABLE
语句中的
前缀长度解释为字符数。
在为使用多字节字符集的列指定前缀长度时一定要加以
考虑。
MySQL
中还支持全文本索引(
FULLTEXT
),该索引可以用于全文搜索。但是在
Mysql5.0
中只有
MyISAM
存储引擎支持全文本索引,并且仅仅局限于
CHAR
、
VARCHAR
和
TEXT
列。索引总是对整个列进行的,不支持局部索引。也可以为空
间类型创建索引,但是只要
MyISAM
存储引擎支持空间类型索引,而且索引的字
段必须是非空。
创建索引的语法如下:
引用
CREATE [UNIQUE | FULLTEXT | SPATIAL] IDEX index_name
[USING index_type]
ON tb1_name (index_col_name,....)
index_col_name:
col_name [(length)][ASC | DESC]
索引的创建可以在创建表的时候就创建,也可以随时增加新的索引。
下面给出一个例子: