V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
letitbesqzr
V2EX  ›  MySQL

mysql 如何把一张表拆分成多表

  •  
  •   letitbesqzr · 2014-08-08 17:15:37 +08:00 · 5863 次点击
    这是一个创建于 3760 天前的主题,其中的信息可能已经有所发展或是发生改变。
    情况是这样,一张表大概有2e的数据,使用solr建索引总会出现莫名其妙的错误,比如内存不足之类的...

    想把那表分成以下这样,每张表分别存储1kw的数据(id不变).
    xxx_1
    xxx_2
    xxx_3
    xxx_4
    xxx_....

    请问有什么工具能做到,如果插入新数据,该如何做到id不变的情况下自动分?
    17 条回复    2014-08-09 10:07:38 +08:00
    plprapper
        1
    plprapper  
       2014-08-08 17:50:02 +08:00   ❤️ 1
    ID不变 是啥意思?
    dong3580
        2
    dong3580  
       2014-08-08 17:56:51 +08:00   ❤️ 1
    每个表加个id嘛,自动增长,发现id大于1KW,try {create table},然后id发现大于2kw就再次try{create table}。

    查询的时候,如果id在2KW-3KW之间,就在xxx_3中查找,所以,你可以封装个简单的逻辑方法来处理。
    我去年改一个网站就发现它是这么玩的。

    再看了看,你要求每个表id不变么?其实还是差不多,第一个表id 0-1kw,第二个表还是id 0-1kw,例如查询a(2kw-3kw)的话就在, (Int)(a/1KW)取整拼接上xxx_就是表名了,不过可能没第一种方便罢了。

    另外,不建议这么做,感觉好混乱的样子。
    wodemyworld
        3
    wodemyworld  
       2014-08-08 18:06:00 +08:00   ❤️ 1
    内存不足,你多分几个表有用么
    wodemyworld
        4
    wodemyworld  
       2014-08-08 18:06:40 +08:00   ❤️ 1
    顶多是查询速度快点罢了,而且这样分表和纵向分区有啥区别呢
    letitbesqzr
        5
    letitbesqzr  
    OP
       2014-08-08 18:28:14 +08:00
    @wodemyworld 建立索引的时候,单表太大了 会出现内存不足
    Mac
        6
    Mac  
       2014-08-08 19:16:14 +08:00   ❤️ 1
    加内存
    letitbesqzr
        7
    letitbesqzr  
    OP
       2014-08-08 19:48:48 +08:00
    @Mac 32G了...
    letitbesqzr
        8
    letitbesqzr  
    OP
       2014-08-08 19:51:18 +08:00
    @Mac
    @wodemyworld
    @dong3580
    @plprapper

    其实就是想做一个,,所谓的"密码查询"的东西... 没怎么接触过大数据,之前一时糊涂,所有数据都导到一张表.. 建立索引的时候各种问题.. 现在把每个网站的"密码" 都单独分一张表,然后再建立索引,这样就正常查询了 速度也很快.. 用的solr 8E数据大概0.2秒
    x10ng
        9
    x10ng  
       2014-08-08 22:53:25 +08:00   ❤️ 1
    写个脚本就可以做到啊,你要对什么字段建索引? 另外,可以试试mongodb
    bojieyang
        10
    bojieyang  
       2014-08-08 23:57:27 +08:00   ❤️ 1
    这个就是水平分表嘛,可以参考TDDL。
    eslizn
        11
    eslizn  
       2014-08-09 00:57:23 +08:00   ❤️ 1
    其实分表的关键在于怎么路由表
    letitbesqzr
        12
    letitbesqzr  
    OP
       2014-08-09 01:10:50 +08:00
    @eslizn 这个倒是无所谓,用solr 建立好索引后,直接是全部表查询.
    letitbesqzr
        13
    letitbesqzr  
    OP
       2014-08-09 01:11:24 +08:00
    @bojieyang 3Q 但是表已经建立好了
    ETiV
        14
    ETiV  
       2014-08-09 03:32:04 +08:00   ❤️ 1
    insert into table_1[2,3,4,5,6,7,8,9](columns, ...) select columns,... from source_table where id % 10 = 1[2,3,4,5,6,7,8,9];

    酱紫?
    Vonex
        15
    Vonex  
       2014-08-09 04:31:11 +08:00   ❤️ 1
    社工库?
    letitbesqzr
        16
    letitbesqzr  
    OP
       2014-08-09 07:57:56 +08:00
    @Vonex 是的 ..
    frankzeng
        17
    frankzeng  
       2014-08-09 10:07:38 +08:00
    别分表,用分区嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:13 · PVG 15:13 · LAX 23:13 · JFK 02:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.