探索MySQL索引(单表百万)优劣对比主键索引VS普通索引
- 4423
- MySQL
- 32
- super_dodo
- 2017/03/02
紧接着上一篇文章关于索引字段的离散度不够大,这次我们来对用户的手机号码做离散索引,关于表结构和内容也详细见前一篇幅。友情链接见该文底部。
这次我们做简易的,也就是只查询一个条件即where phone='****';我们分为三种对比不建任何索引,主键索引,普通索引三种。
//默认情况下,不在phone字段上建索引的情况下 SELECT SQL_NO_CACHE FROM user_list WHERE phone='18674062169'; //EXPLAIN索引 type:ALL rows:1199796 Extra:Using where //受影响的行: 0 //时间: 0.688s //主键索引的情况下 PRIMARY KEY (`id`,`phone`) SELECT SQL_NO_CACHE * FROM user_list WHERE phone='18674062169'; //EXPLAIN索引 type:ALL rows:1199796 Extra:Using where //受影响的行: 0 //时间: 0.676s //普通索引的情况下 PRIMARY KEY (`id`), KEY `idx_phone` (`phone`) SELECT SQL_NO_CACHE * FROM user_list WHERE phone='18674062169'; //EXPLAIN索引 type:ref key:idx_phone ref:const rows:1 Extra: //受影响的行: 0 //时间: 0.001s SELECT SQL_NO_CACHE * FROM user_list WHERE phone=18674062169; //EXPLAIN索引 type:ALL rows:1196420 Extra: //受影响的行: 0 //时间: 0.695s //???疑惑:没用使用到索引.... 通过以上得到以下结论: 1.在所有的情况下,手机号码取靠前的靠后的都没有太大的差别。 2.手机号码的字段是varchar字符类型的时候,不使用索引的情况下没有影响。 当你想使用索引的时候必须加上单引号,不然索引会失效,无法使用到索引。 3.当查询只有一个字段的时候,主键索引和没有索引的情况下都是全表扫描,没有区别。 4.猜测,主键索引主要是为了来约束数据的冗余和存储,对于查询没有太多帮助。 5.对于单列查询,使用普通索引是很有必要的,扫描行数只有1行,且只需要极短的时间。
通过以上得到以下结论:
1.在所有的情况下,手机号码取靠前的靠后的都没有太大的差别。
2.手机号码的字段是varchar字符类型的时候,不使用索引的情况下没有影响。当你想使用索引的时候必须加上单引号,不然索引会失效,无法使用到索引。
3.当查询只有一个字段的时候,主键索引和没有索引的情况下都是全表扫描,没有区别。
4.猜测,主键索引主要是为了来约束数据的冗余和存储,对于查询没有太多帮助。
5.对于单列查询,使用普通索引是很有必要的,扫描行数只有1行,且只需要极短的时间。
探索MySQL索引(单表百万)优劣对比主键索引,联合索引(顺序)
三毛说:"没有一个人是禁得起分析的,能够试着了解,已是不容易了。"
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例