MySQL百万级数据表or查询优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL百万级数据表or查询优化相关的知识,希望对你有一定的参考价值。
参考技术A 目前公司的订单表有100多万条,使用订单号查询数据时,所需时间大多要10-30秒不等,查看了慢查询日志,发现有的订单查询竟然耗时65秒我查看了原有的查询语句,发现where后面跟了or查询,虽然3个or都索引,使用explain分析查询结果,发现要扫描近70万行,几乎是全盘扫描一遍,只为获取最多3条数据,效率实在是低下
这3个字段均设置了索引,但or在这个语句中,使索引失效了(主要看最后几行)
使用union all代替or查询,也就是说把3个字段的查询分别做查询,将结果使用union all连接在一起,这样单次查询可以用到索引,效率大大提高
先看一下分析结果
简要的sql语句,查询结果不超80ms
mysql 百万级数据的模糊查询 优化 笔记
最近老大给了一个需求,是要写一个姓名的模糊查询。
问题很简单,难度在于这张表有将近500W条数据。
如果要做中文的模糊查询,效率简直惨不忍睹。
网上查了一下资料,发现全文索引挺符合我的需要的。
结果,使用下来。其实并不太符合我的要求。
全文索引的最小单位是词,如果不是在 in boolean mode 下是没办法 查询的
其次,全文索引只支持 半模糊查询,我所谓的半模糊就是 xx like ‘xx%‘
如果使用全模糊查询,建完索引之后,用 like 或者用 regexp 在常用关键词的时候 确实快很多。
可以控制在0.1左右
不过低频词还是很慢 需要10S
所以,基于这种情况,可能还是做分表比较好
或者修改需求 做半模糊查询。
下面是参考的资料
MySQL中的全文检索(1)
以上是关于MySQL百万级数据表or查询优化的主要内容,如果未能解决你的问题,请参考以下文章