MySql 数据量大时索引无效!

cun1208 2014-09-24 11:11:44
如题,语句是这样子的:explain select * from m_service_message s where s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 索引没有命中
...全文
2954 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
moon0312 2014-10-14
  • 打赏
  • 举报
回复
受教了~~~~
ACMAIN_CHM 2014-09-24
  • 打赏
  • 举报
回复
s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 这个条件估算一下大概会有多少记录满足条件,如果达到 30% 则MYSQL不会再使用索引。因为使用索引的开销反而更大。
cun1208 2014-09-24
  • 打赏
  • 举报
回复
引用 1 楼 mchdba 的回复:
1,查询的数据量可能已经是总数据量的20%以上了,这个时候就会选择表扫描。 2,索引坏块,需要重建索引。
如果把like改为 =,索引是可以命中的,说明是like的原因,索引应该没问题。这个id的记录在表里占了60%左右,请问这种问题要怎么处理?
九月茅桃 2014-09-24
  • 打赏
  • 举报
回复
1,查询的数据量可能已经是总数据量的20%以上了,这个时候就会选择表扫描。 2,索引坏块,需要重建索引。
ACMAIN_CHM 2014-09-24
  • 打赏
  • 举报
回复
引用 4 楼 cun1208 的回复:
[quote=引用 3 楼 ACMAIN_CHM 的回复:] s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 这个条件估算一下大概会有多少记录满足条件,如果达到 30% 则MYSQL不会再使用索引。因为使用索引的开销反而更大。
这个条件的记录数有20多万,达到50%左右。需求是要满足模糊查询,请问有好的解决方案吗?[/quote]没有好的办法。50%的数据,显然使用索引已经没什么意义了。 试想一下,如果在全班同学中查找所有男生, 哪怕手上有哪一张表按男女排好序的,你也不可以再去先看男女排序表找到学号,再到 花名册表(以学号排序)再找到姓名及其它字段。 MYSQL认为还不如直接在花名册中全表扫描一遍高效。
cun1208 2014-09-24
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 这个条件估算一下大概会有多少记录满足条件,如果达到 30% 则MYSQL不会再使用索引。因为使用索引的开销反而更大。
这个条件的记录数有20多万,达到50%左右。需求是要满足模糊查询,请问有好的解决方案吗?

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧