mysql 大数据量查询如何优化,没办法去掉<>和like

mysql 大数据量查询如何优化,没办法去掉<>和like,第1张

其实你这个需要程序和数据库有一致的设计。可考虑分区。

通过电话前缀来分区,以下只是一个形式,不推荐用中文命名,

这样,只要用户不填写电话,那么前三字符就是xxx,自动会放入 ZFU区。

CREATE TABLE Customer

(

ID INT NOT NULL,

Mobile_PerNO CHAR(3) DEFAULT 'xxx',

Mobile VARCHAR(30)

)

PARTITION BY LIST(Mobile_PerNO)

PARTITION 联通186 VALUES IN (133),

PARTITION 移动139 VALUES IN (139),

PARTITION 电信133 VALUES IN (133),

PARTITION ZFU VALUES IN (xxx)

)

其次你过于依赖数据库而成形的程序,用点不客气的话说,那就是耦合极高的设计。

你其实完全可以在注册时,写入验证,一个手机号就能注册一次。左右打掉空格,这样手机上就能建立唯一索引。 使用LIKE ‘133%’ 至少性能上有一定的飞跃。

至于你的第二个SQL, 在时间和发送号码上可以建立索引,然后条件上写入时间。

也可以使用hash方式按照年季度分区。

理论上 性能提升百倍还是一点问题都没有的。

分区资料 看官方文档。

MYSQL多表条件多LIKE 并且是OR 链接,出来好多重复数据是设置错误造成的,解决方法为:

1、先看下我们的表数据,有一些数据是重复的。

2、要查找重复数据,我们可以使用mysql里的having语句,如图。

3、执行这个语句后,我们可以看到现在的结果里显示的就是表中重复数据的字段。

4、要删除这些重复的数据,我们找出这些数据的ID,在select语句里,添加id字段,使用max函数,可以得到重复数据最后面的id。

5、执行结果如图,得到重复数据的id为8和9。

6、这样我们就可以使用delete语句来删除这二个id的数据了。

7、然后在外边添加一个delete语句就行了,详细代码如图。

相比update和insert,一般查询应该是数据库中 *** 作最频繁的。而在有些应用场景需要用到like模糊查询,那么对于大数据,查询的时候就要注意了。

现在来分析一下为什么like语句查询的效率会很低,测试数据共4000000条,如下图:

第一步:不使用索引

下图可以看出,不使用索引的时候普通查询与like查询的耗时相当,like略长,这也是必然的,因为它要进行额外的算法。

第二步:使用索引

如下图,使用索引后,普通查询的耗时基本算是秒查,非常快;而like查询还是耗时一秒多。

第三步:分析原因

如下图,用explain分析一下,此时我们立刻明白了,普通查询用到了索引,但是like语句没有用到索引。

所以,照成mysql中like查询效率低下的原因是:在有些情况下,like查询使用不到索引,会扫描全表。

最后,补充一下,like语句有时候也是可以用到索引的,如下图,如果我们查询的时候写成“like 'dd_'或者like 'dd%'”,这样是可以用到索引的,此时的查询速度也会相对的快一点。虽然快了一点,但是还是比普通查询耗时要多很多。

因此,当表的数据量比较大的时候,尽量还是不要用like语句了。如果想做模糊搜索,建议用搜索引擎,比如solr,这样会比like强大n倍。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8697954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存