Mysql(5)索引
创建索引时,需要确保该索引是应用在sql查询语句的条件(一般作为where子句的条件)
实际上,索引也是
mysql索引的建立对于mysql的高效运行是很重要的。索引可以大大提高mysql的检索速度。 创建索引时,需要确保该索引是应用在sql查询语句的条件(一般作为where子句的条件) 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 缺点:过多的使用索引会造成滥用,虽然索引大大提高了查询速度,同时却会降低更新表的速度(增删改)。 因为更新表的时候,mysql不仅要保存数据,还要保存一下索引文件。 普通索引 最基本的索引,没有任何限制。 create index indexName on mytable (userName(length) ) 创建 索引 索引名on 表名列名(长度) 如果是 char,varchar类型,length可以小于字段实际长度。如果是blob和text类型,必须指定length。 修改表结构(添加索引) alert table tableName add index indexName(columnName) 创建表的时候直接指定 create table mytable(userName varchar(50) not null,index[indexName] (userName(50))); 删除索引的语法 drop index [indexName] on table 唯一索引 与前面的普通索引类似,不同的是,索引列的值必须唯一,但允许空,如果是组合索引,则列值的组合必须唯一。 创建唯一索引 create unique index indexName on table (userName(length)) 修改表结构 alert table mytable add unique[indexName] (userName(length)) 创建表的时候直接指定唯一索引 create table mytable (userName varchar(50) not null , unique[indexName](userName(length))); 使用alter命令添加和删除索引 1.alert table tblname add primary key (column_list);该语句添加一个主键,这意味着索引值必须是唯一的,且不能为null 2.alert table tbl_name add unique index_name(column_list);这条语句创建索引的值必须是唯一的(除null外,null可能会出现多次) 3.alert table tbl_name add index index_name(column_list);添加普通索引,索引值可出现多次 4.alter table tbl_name add fulltext index_name (column_list) ; 该语句制定了索引为fulltext 用于全文索引 ------------------------------分割 注意事项 1.索引不要去参加计算 因为如果索引列参与计算就不会用到索引 2.索引不要去使用函数运算 因为如果索引列使用了函数计算就不会用到索引 3.正则表达式不使用索引 4.索引列like不要在前面加 % 如name为索引列 name like ('%小白%')是不走索引的 name like ('小白%')是走索引的 5.字符串与数字比较不适用索引 6.如果条件使用了or or两边的字段都要有索引 有一个没有索引则不走索引 例: name加了索引 sex没有加索引 name='xx' or sex='xx' 这就不会走索引 就是正常的查询速度 7.如果估计全表扫描比索引快,就不用索引。 使用技巧 使用索引时,有一些技巧: 1.索引不会包含有NULL的列 只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的。 2.使用短索引 对串列进行索引,如果可以就应该指定一个前缀长度。例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是唯一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 3.索引列排序 mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序mysql索引表,如果需要最好给这些列建复合索引。 4.like语句操作 一般情况下不鼓励使用like操作,如果非使用不可,注意正确的使用方式。like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引。 5.不要在列上进行运算 6.不使用NOT IN 、、!=操作,但=,BETWEEN,IN是可以用到索引的 7.索引要建立在经常进行select操作的字段上。 这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 8.索引要建立在值比较唯一的字段上。 9.对于那些定义为text、image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少。 10.在where和join中出现的列需要建立索引。 11.where的查询条件里有不等号(where column != …),mysql将无法使用索引。 12.如果where字句的查询条件里使用了函数(如:where DAY(column)=…),mysql将无法使用索引。 13.在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |