mysql的分区,hash分区探讨

gb4215287 2014-05-16 11:30:46
我先说说我的项目需求,我要根据手机号码去查找联系人的信息,手机号码找不到的话再根据邮箱号去查找联系人的信息,这2者都找不到则返回空的信息就行了,我现在的联系人信息表里面有1500万条数据,虽然我在手机号码字段和邮箱字段加了索引,但是查询速度仍然非常慢,所以现在就想到了mysql表的分区。我想到的方法是:这个表不要主键了,主键通过手机号码和邮箱的组合列去分区,hash方法分区,不知道思路是否正确,下面是分区sql语句,各位大神给瞅瞅呗

CREATE TABLE IF NOT EXISTS `temp_fen` (
`custname` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '客户姓名',
`custemail` varchar(60) COLLATE utf8_unicode_ci NOT NULL COMMENT '客户邮箱',
`custtel` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '客户电话',
`provice` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '省份',
`city` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '市',
`county` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '县',
KEY `custemail` (`custemail`),
KEY `custtel` (`custtel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='联系人表' AUTO_INCREMENT=1 partition by hash(custemail,custtel) partitions 5;

因为我看着以前的hash分区语句都是hash(id),类似于这种的,按照一个列分区的,而我的是按照2列分区hash(custemail,custtel),如果感觉我的思路不对,各位也可以说说正确思路,谢谢各位了!

...全文
231 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcshellcode 2014-05-17
  • 打赏
  • 举报
回复
可以考虑用全文索引sphinx
智商众筹 2014-05-17
  • 打赏
  • 举报
回复
“虽然我在手机号码字段和邮箱字段加了索引” 这个索引是把手机号和邮箱两个字符串按顺序连起来建B树,当sql至少包含手机号的时候才会用到,也就是单查邮箱完全没起到作用 业务逻辑上看手机号都是唯一的,可以作为主键,查询的时候是哈希值一步到位 给邮箱单个字段建索引,应该会解决的

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧