标签:
提高查询的效率,相当于在字典中建立的字母表或者偏旁部首表,这样查询当然比一行一行查询要快的多
每个存储引擎可以建立索引的长度是不一样的,但每个表至少支持16个索引,总的索引长度至少为256个字节。大多数存储引擎有更高的限制。
create index index_name [USING index——type] on table_name(index_col_name)
其中:index_col_name: col_name[(length)] [ASC | DESC]
删除:drop index index_name on tabel_name
Mysiam和Innodb存储引擎默认的都是BTEE索引。
而MEMORY存储引擎支持HASH索引,hash索引的问题是:只能使用=或者
<=>操作符比较,用于Order by不能使用索引。
其中Handler_read_key代表一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。Handler_read_rnd_next代表在数据文件中读下一行的请求次数,如果大量的扫描表的话,此值将很高,此时应该建立索引,或者当前的索引建立不合理,需要重新建立索引。
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 1 |
| Handler_read_key | 141 |
| Handler_read_next | 12 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 24 |
| Handler_read_rnd_next | 495 |
搜索的索引列,不一定是所要选择的列,即最合适索引的列是出现在where子句中的列,或者连接子句中指定的列,而不是出现在select关键字后的选择列表中的列。
使用唯一的索引。索引列的基数越大,就是不同的列越多,索引的效果就越好。
使用短索引、前缀索引。对于大的字符串来说,只要指定前面的一些字符来建立索引即可,因为索引也是需要磁盘空间的。
使用最左索引,就是建立索引时写在第一个位置的列。
不要过度使用索引:索引的建立生成都要占据额外的磁盘空间,并降低写操作的性能。在修改表的使用,索引也必须更新。只要保持所需的索引有利于查询优化
注意点:
当建立复合索引的时候,一般查询条件中使用到最左的索引列,索引会被使用
当查询条件中使用like关键字时,%不能放在开头,否则不会使用索引。
当查询条件中使用or关键字时,应该每个查询条件都有独立的索引
标签:
原文地址:http://www.cnblogs.com/wxl-dede/p/5023253.html