通过电话前缀来分区,以下只是一个形式,不推荐用中文命名,
这样,只要用户不填写电话,那么前三字符就是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倍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)