PHP
来源:互联网 发布:android应用程序优化 编辑:程序博客网 时间:2024/05/19 14:54
遇到的问题:业务线对线索ID和电话号码进行模糊搜索,要解决的问题也就是 mysql中对int类型的数据进行模糊搜索,主要是考虑工作量和效率之间的关系,表数据200W左右
表类型如下:
CREATE TABLE `table_xxx_linkman` ( `customer_name` varchar(40) NOT NULL DEFAULT '' COMMENT '联系人姓名', `telephone` int(11) NOT NULL DEFAULT '' COMMENT '联系人手机号', ...) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='客户联系人表';CREATE TABLE `shops_customer_demand` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '客户租售表主键ID', ... PRIMARY KEY (`id`),) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='客户租售线索表';
想到的解决方法有两种:
一种是在表结构中添加varchar类型的检索列,优点当有like业务时,检索此列,快速查找,缺点是多出一列无用的数据,表数据越多,缺点越明显。ps: 之前有老旧的数据把手机号存成int(11),显然是非常不合理的。
COMMENT='客户联系人表';ALTER TABLE `table_xxx_linkman` ADD COLUMN `search_telephone` char(11) NOT NULL DEFAULT '' COMMENT '手机号(用于查询)' AFTER `telephone`;
执行这条sql,int类型的like搜索完美解决,优缺点在之前说过,不在叙述。
想到的第二个方法就不用这样了,因为时间和业务线的考虑我选用了第二种方法,(商铺业务线本身没有那么大搜索的需求,牺牲了sql执行时间)。
在业务底层拼接sql,使用cast函数,cast 函数强转类型进行like模糊匹配,代码如下:
... where 1 and ( CAST(cd.id as Char) LIKE '%27%' or CAST(l.telephone as Char) LIKE '%27%' ) ORDER BY cd.weight DESC , cd.id DESC
mysql cast函数扩展 :
- BINARY[(N)]
- CHAR[(N)]
- DATE
- DATETIME
- DECIMAL
- SIGNED [INTEGER]
- TIME
- UNSIGNED [INTEGER]
使用CAST将varchar转换成int类型排序
select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;
使用CONVERT将varchar转换成int类型排序
select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10
经过测试20万数据,第一次执行后大概20.01ms,之后的执行因为触发器里有缓存后,误差就可以忽略不计了。记录起来,也分享给你们。
阅读全文
0 0
- PHP
- PHP
- php
- php
- PHP
- PHP
- php
- php
- php
- PHP
- php
- php
- php
- PHP
- PHP
- php
- php
- PHP
- 在需要实时更新数据的接口中使用 304 状态码
- 函数的拷贝
- TensorFlow深度学习进阶教程:TensorFlow实现CIFAR-10数据集测试的卷积神经网络
- OpenCV成长之路(4):图像直方图
- 欢迎使用CSDN-markdown编辑器
- PHP
- 10.10考试总结
- Quartz-Spring[一]之MethodInvokingJobDetailFactoryBean配置任务
- 已解决 vmware 虚拟机安装后没有虚拟网卡问题
- STM32 JTAG SWD (PB3 PB4用作普通IO)及启动模式
- Binex
- 矩阵的物理意义
- java类集---ListItertor接口
- Leetcode||33. Search in Rotated Sorted Array