MySQL 的 like %关键字怎么优化

MySQL 的 like %关键字怎么优化,第1张

MySQL 的 like %关键字怎么优化

选择最有效率的表名顺序(只在基于规则的优化器中有效):

ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.

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

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

这样,只要用户不填写电话,那么前三字符就是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方式按照年季度分区。

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

分区资料 看官方文档。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存