MySQL常用索引有:
1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值2、普通索引或者单列索引
3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,
索引才会被使用。使用复合索引时遵循最左前缀集合
4、唯一索引或者非唯一索引
5、空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、
LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建
空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建
mysql索引滥用会造成:
1,会降低更新表的速度2,大量占用磁盘空间
3,索引从复会降低查询速度,因为MySQL需要计算使用哪个索引
MySQL使用索引的注意事项:
1 索引不会包含有NULL值的列只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效
的。所以我们在数据库设计时不要让字段的默认值为NULL。
2. 使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值
是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作
3. like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”
可以使用索引。
4. 不要在列上进行运算
列上进行运算将导致索引失效而进行全表扫描但支持<,<=,=,>,>=,between,in,like
5,使用复合索引是一定要从最左的起始索引用起,否则索引不起作用
sql 语句使用索引注意事项
1 .where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。
explain select * from a where id=1 or uid =23;//如果是myisam索引不会失效,如果是innodb索引失效
解决办法是
EXPLAIN SELECT * FROM a WHERE id=1 UNION SELECT * FROM a WHERE uid=23 //哪个引擎都支持索引
2 .必须所有的or条件都必须是独立索引:
explain select * from a where id=1 or uid =23;//如果id,uid有一个字段没有索引,那么就会全文搜索
3. 用UNION替换OR (适用于索引列):
用union替换索引前提是用or时索引失效,查询字段又都有索引时替换,否则替换了效果不明显:
例如:
myisam引擎下
1,select * from wy_wxuser where id <500 or id > 1000
2,select * from wy_wxuser where id<500 union all select * from wy_wxuser where id>1000;
使用union的速度要远漫于使用or:所以请考量着使用