Mysql数据库的索引采坑

是昨天同事那里针对sql的优化问题。
一开始发现left join后面的临时标出结果比较慢,在测试数据库中测试不到4000的数据居然花费了近20秒。(而实际上,真实表是由2万多条数据的,呵呵)
explain该语句发现小数据的表居然时全查询(index),似乎是索引没有起作用。

但是这个表的索引是手动建立好的,甚至之后索引还重新删除重建了一次。索引依旧没有起作用。
表现为哪怕是普通的select * from a的语句,都需要5秒左右才能出结果。

只好查资料,找高手了,发现是那张表的数据有问题。在表中,发现有40多条数据的id是显示为空的。高手说,表中索引的选定的字段是null值,会导致mysql索引失效。和那边的人沟通后确认似乎实在业务设计的时候,就故意指定该列为空。而这些数据还都是必须显示的。

马上都到要交付的时候了,只能和接口人扯皮了。两个方案:1,将这个表的索引列修改为某个参数,(假装是空的),使索引生效。后面再有新数据呢?需要和写数据的人沟通联调。
2.再建一个表。这个具体的我还是不太懂原因。但是没有什么优势。

* 需要说明一下这个索引列好像是id,官方的意思使索引列必须是唯一的值即不能重复,才会生效

以下在学习一下,Mysql索引的概念和用处

Mysql索引概念

在MySQL中,索引(index)也叫做“键(key)”,它是存储引擎用于快速找到记录的一种数据结构。

Mysql索引引擎的种类

FULLTEXT,HASH,BTREE,RTREE。

具体详见:
Mysql几种索引类型的区别及适用情况
水平有限,目前只知道btree和hash两个(能看懂)

索引的类型

普通索引

无限制

唯一索引

索引列的值必须唯一,但允许有null。但是组合索引,列表之组合必须唯一

全文索引

几乎看不懂,不清楚用法,不明白实际意义。似乎是在MyISAM表中使用,应该是一些报社或者教育类的应用在使用吧。(逗比)

单列索引,多列索引

忘词了
mysql单列索引、多列索引的使用讲解

组合索引

索引工作原理

类似看书之前都会想看书的目录(索引),找到对应的章节,对应的页码后就可以快速查看需要的内容,
Mysql中,引擎使用类似的方法,首先在索引中查找值,然后根据匹配的索引找到对应的数据行,然后将其返回给客户端。
MySQL索引背后的数据结构及算法原理

索引的用法

索引优化

索引的优化

Mysql索引的使用和优化

脑袋疼,还是从基础开始学习吧。

吐槽一下,管理,csdn对于360浏览器的支持是什么情况,
啦啦啦

谷歌是正常的,难道是我网速的问题??!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值