Mysql index使用事项

来源:互联网 发布:小米电视怎么样 知乎 编辑:程序博客网 时间:2024/06/08 15:59

1,操作符和index关系

<>,!=,not in 不会使用index
<,<=,=,>,>=,between,in 可以使用索引
like 看情况,遵循最左原则就会用.
 like ‘%xxx%’不会用.
 like ‘xxx%’ 会用
or 看情况
 所有的or条件都必须是独立索引,这样才会使用索引.
 可以用in或者union来替换or.
 where后面field不一样的判断用union,一样的判断用or.

2,数据类型和index关系

类型一定要匹配,否则使用不了index.
select * from test where mobile = 13711112222;
如果mobile是char或者varchar类型,那么上面即使mobile字段设置了索引,也不会使用,注意类型匹配.要添加”: select * from test where mobile = ‘13711112222’;

3,索引列字段进行了函数操作,索引不会使用

如 where md5(password) = “xxxx”,所以不要在索引列上进行运算.

4,NULL会导致索引不可用,可以通过其他方式来表达,比如-1.

5,学会使用短索引,即建立“前缀索引”

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

6,当mysql一旦估计检查的行数可能会“太多”,范围查找优化将不会被使用,索引无效

select uid from users where registered < 1295001384;应避免这样的大数据查询

7.尽量借用覆盖索引,减少select * from..语句使用

select uid,fuid from users where uid = 1223232; 把index的field正好按index顺序输出.index(uid,fuid)

8.order by子句,尽量使用index方式排序,避免使用filesort方式排序

MySQL支持二种方式的排序,FileSort和Index,后者效率高,它指MySQL扫描索引本身完成排序。FileSort方式效率较低。
ORDER BY满足以下情况,会使用Index方式排序:
 a)ORDER BY 语句使用索引最左前列。
 b)使用Where子句与Order BY子句条件列组合满足索引最左前列.

9.强制使用索引和禁止使用索引

1)强制使用索引: force index(index_name)

select * from table force index(PRI) limit 2;(强制使用主键)
select * from table force index(ziduan1_index) limit 2;(强制使用索引”ziduan1_index”)
select * from table force index(PRI,ziduan1_index) limit 2;(强制使用索引”PRI和ziduan1_index”)

2)禁止使用索引:ignore index(index_name)

select * from table ignore index(PRI) limit 2;(禁止使用主键)
select * from table ignore index(ziduan1_index) limit 2;(禁止使用索引”ziduan1_index”)
select * from table ignore index(PRI,ziduan1_index) limit 2;(禁止使用索引”PRI,ziduan1_index”)

10.mysql索引选择,和IO操作数量有关

索引选择性就是结果个数与总个数的比值。
用sql语句表示为:
SELECT COUNT() FROM table_name WHERE column_name/SELECT COUNT() FROM table_name
一般来说(例如书 “SQL Tuning“),如果选择性超过 20% 那么全表扫描比使用索引性能更优(oracle)。
但MySQL是没有计算索引的选择性的,只是预测逻辑IO操作的数量,因此对于MySQL索引要慎重选择。
参考链接:
http://database.51cto.com/art/201104/253568.htm
http://www.cnblogs.com/fanqi/p/6188093.html

原创粉丝点击