例如,现在有一张表city,按照城市编码进行分表city_*,那么我在查询时候一般要先获取要查询的分表编码,然后根据city_*进行查询,能不能直接根据city查询,在配置之类的解析具体使用哪张分表的方案呢,数据库使用mysql存储引擎使用innodb,请教各位大神,
补充一下问题:之前有点没说清楚,是想在程序里进行查询一些操作时直接调用city表想用中间间或是配置自动解析对应的city_*,最终执行语句是city_*
你的意思时你将city分为了多张表,但是你得程序还是访问city表,通过一系列处理,希望执行 select * from city 会自己取实现调用 select * from city_* ?
你不觉得这样设计有点反人类吗? 这样分表有什么意义呢?不过还时有办法实现,使用存储过程吧!
建议还是使用分表规则在程序里面处理访问哪一张表,这个虚拟规则表可以放在内存中,减少表单查询。
分表有规则就可以了,比如id100w一个表,然后读取的时候按照规则得到表名,就是事先规定好的。
先建立一个路由规则表,然后先查询路由规则然后查询表
mysql 5.1以上的版本可以在存储过程中使用prepare语句,把表名作为变量动态生成需要的sql然后执行
可以使用mysql的分区
分表是有规则的,例如按取模为3的分表,根据具体的查询条件,查询具体的表
那就加一个中间表包含两个字段:tablename,idscope,前提是你分表的名字要有规则,比如说表city_1对应的cityid范围是在1到1000,
那么这个中间表对应的值就是:tablename=city_1,idscope=1-1000。
然后查询的时候,可以用cityid between SUBSTRING_INDEX(idscope,'-',1) and SUBSTRING_INDEX(idscope,'-',-1),来判断取哪个tablename