Mysql中的索引问题
索引的用途
提高查询的效率,相当于在字典中建立的字母表或者偏旁部首表,这样查询当然比一行一行查询要快的多
每个存储引擎可以建立索引的长度是不一样的,但每个表至少支持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不能使用索引。
查看索引使用的情况
mysql> show status like 'Handler_read%';
其中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关键字时,应该每个查询条件都有独立的索引
最新文章
- SQL面试笔试经典题(Part 1)
- ABP源码分析三十九:ABP.Hangfire
- 规范化的软件项目演进管理--从 Github 使用说起
- iOS开发中的错误整理,通过storyboard做项目,遇到view看不见,或者view被压缩的情况
- Type-base dispatch
- 基于visual Studio2013解决面试题之1409基数排序
- iOS数据持久化之数据库:SQLite和FMDB
- C# Webform中读取Windows AD/LDAP域用户清单
- PAT-B-1020 月饼 (25)(25 分)
- C# linq语句学习
- EvansClassification
- struts2+mybatis3+log4j2+bulma+mysql8元工程
- img的complete和onload
- 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器
- [转] 一个小时学会Git
- 实验三 Java敏捷开发与xp实现
- nodejs+mysql入门实例(改)
- Linux命令行介绍
- 结束autocad异常进程
- 学习7__STM32--SPI外设之双机通信---