我想请教大家一个问题
目前准备开发在线进销存软件,想为每一个注册用户分配一个数据库,但大家又说这样不合理
但是如果做成一个库的话,因为每个商家都有几千个产品,这样的话一个产品表的数据很容易就达到了上百万了,我测试了一下,虽然已经建立了索引和全文搜索,但是模糊搜索还是要花近10秒,实在无法接受,大家有什么好的建议吗
测试数据库是mysql 5.0 

解决方案 »

  1.   

    mysql不熟悉,如果是oracle的话分区,索引,不知道mysql有没有类似的功能。
      

  2.   

    SQL可以用文件组,oracle可以用表空间
      

  3.   


    速度慢只能证明你索引建的有毛病。
    虽然硬件是平台,但是在考虑省级硬件之前,必须先优化SQL
    不过你这种模棱两可的提问根本就给不出答案。
      

  4.   

    DB engine 是什么, 调一下 mysql参数 100万 数量级 mysql有索引 ,查找用不着 10s
      

  5.   

    想为每一个注册用户分配一个数据库???不是吧....
    我觉得有以下几点:
    1.mysql不适合百万级的
    2.检查下索引有没有起到作用,我之前做过测试,在mysql下建索引没起作用的,这事我也纳闷
      

  6.   


    你们老板有钱没。有钱就让他直接加机器。hash到不同机器上。你这才几百万而已。索引对的话不应该有问题的。能把你表以及模糊搜索的SQL打出来看看吧。
      

  7.   

    试试 多表,与hash 连用
      

  8.   

    在指定查询条件的时候,先指定商家的条件,然后再写模糊查询的语句,形如:
     
    select * from 
      (
      select * from products where supplierID=@id
      ) a
    where a.name like '%产品%'
      

  9.   

    从几百万条中用%检索肯定快不了。
    改用全文索引吧:http://lucene.apache.org/
      

  10.   

    1000K左右的表,ACCESS这种桌面型的数据库,都不会慢得非常慢.(前提是索引用得到)这个数量的记录,如果非常慢。一般是SQL语句有问题//我不懂MYSQL,但各种数据库基本的原则是一致的按你的说明,因为你用的模糊查询,基于这种的SQL,基本上,在信息描述/名称等上的索引,建了也是用不上的.因为你一般会 where cargo_desc like '%我要找的东西%'%号在前,基本上DBMS没法用索引了.(除非一些非常非常特殊的设置)就算是1000万的硬件配置,该不快的还是快不了------------------------------------------------
    你肯定有"商家"这样的字段你需要在这个字段上加索引,同时你的SQL需要故意引导DBMS使用到这个索引,可以一上来就过滤剩下几K条记录了.要留意,这个字段的条件,不应当使用类似where "商家" like "%123%" //但用 "商家" like '123%' 一般会用上或,你也不可以使用where trim("商家") = "abc" //除非数据库有装门的设置,否则字段在函数中是用不上索引的,因为DBMS要每条记录帮你算一次才知道符不符合条件.
      

  11.   


    这才是正确的解决方案。全文检索,从来就不是数据库的强项。而like 非常类似全文检索
      

  12.   

    楼上正解,可以使用开源的全文检索引擎或者google站内搜索。
      

  13.   

    用lucene吧,检索时间一般在1s以内
      

  14.   

    mysql 不大熟,不知道可不可以用临时表
      

  15.   


    mysql 好象是不能建temp table 的。
      

  16.   

    能否确定用户有多少?如果用户量不是太大,可以考虑比如每10个id建以个用户产品表,按照取模来区分,这样搜索id为9的用户的所有产品,可以搜索第一张用户产品表,搜索id为19的用户的产品,可以搜索第二张表。
    另外需要注意的是Mysql在每个database里的表要在50个以内,否则效率下降很快。还有,Mysql单个表的数据量在200万以内是比较合适的,如果这个数量级的时候效率很低,就需要考虑是不是你的语句有问题。
      

  17.   

    能否确定用户有多少?如果用户量不是太大,可以考虑比如每10个id建以个用户产品表,按照取模来区分,这样搜索id为9的用户的所有产品,可以搜索第一张用户产品表,搜索id为19的用户的产品,可以搜索第二张表。
    另外需要注意的是Mysql在每个database里的表要在50个以内,否则效率下降很快。还有,Mysql单个表的数据量在200万以内是比较合适的,如果这个数量级的时候效率很低,就需要考虑是不是你的语句有问题。
      

  18.   

    模糊搜索就是麻烦。。我建议你用“倒排”索引。
    看看google等搜索引擎的做法。你的数据量不过是小巫见大巫,呵呵。用lucene全文检索也是一个方案。更正:MySql是有临时表的。本人用过哦。呵呵
    http://www.cnblogs.com/freeliver54/archive/2009/01/05/1369504.html
      

  19.   


    lucenes是apache的一个项目,专注于文本索引的。。可以去官网看看。。