说一说mysql的索引吧
2012 年 01 月 15 日 分类 :MySQL语法 0
我做开发好几年了,从来没用过索引,这次做的一个大系统最近非常慢,偶然的一个机会我找个字段加了下索引,速度感觉提升了100倍,才对索引产生兴趣的。
先规划你的查询 之后使用explain看一下 是否使用了索引 如下:
explain SELECT * from web_site where first_url like ‘%http://www.xqs.cn%’
哪个要加索引要看查询的需求,基本都是经常会用到检索的才需要加索引,
不是经常用到where语句中的字段如果添加索引的情况不但会使表空间变大,而且增加修改的负担。
1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1)创建索引:Create INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:Alter tableName ADD INDEX [indexName] ON (tableColumns(length)) 或者 CREATE INDEX username ON tableName (uname) 我常用后者。
(3)创建表的时候直接指定:Create TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
2.唯一索引。
它与前面的”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:Create UNIQUE INDEX indexName ON tableName(tableColumns(length))
(2)修改表结构:Alter tableName ADD UNIQUE [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:Create TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));
3.主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:Create TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用Alter命令。