mysql 索引的优化

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:所以请考量着使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值