我想请教大家一个问题
目前准备开发在线进销存软件,想为每一个注册用户分配一个数据库,但大家又说这样不合理
但是如果做成一个库的话,因为每个商家都有几千个产品,这样的话一个产品表的数据很容易就达到了上百万了,我测试了一下,虽然已经建立了索引和全文搜索,但是模糊搜索还是要花近10秒,实在无法接受,大家有什么好的建议吗
测试数据库是mysql 5.0
目前准备开发在线进销存软件,想为每一个注册用户分配一个数据库,但大家又说这样不合理
但是如果做成一个库的话,因为每个商家都有几千个产品,这样的话一个产品表的数据很容易就达到了上百万了,我测试了一下,虽然已经建立了索引和全文搜索,但是模糊搜索还是要花近10秒,实在无法接受,大家有什么好的建议吗
测试数据库是mysql 5.0
速度慢只能证明你索引建的有毛病。
虽然硬件是平台,但是在考虑省级硬件之前,必须先优化SQL
不过你这种模棱两可的提问根本就给不出答案。
我觉得有以下几点:
1.mysql不适合百万级的
2.检查下索引有没有起到作用,我之前做过测试,在mysql下建索引没起作用的,这事我也纳闷
你们老板有钱没。有钱就让他直接加机器。hash到不同机器上。你这才几百万而已。索引对的话不应该有问题的。能把你表以及模糊搜索的SQL打出来看看吧。
select * from
(
select * from products where supplierID=@id
) a
where a.name like '%产品%'
改用全文索引吧:http://lucene.apache.org/
你肯定有"商家"这样的字段你需要在这个字段上加索引,同时你的SQL需要故意引导DBMS使用到这个索引,可以一上来就过滤剩下几K条记录了.要留意,这个字段的条件,不应当使用类似where "商家" like "%123%" //但用 "商家" like '123%' 一般会用上或,你也不可以使用where trim("商家") = "abc" //除非数据库有装门的设置,否则字段在函数中是用不上索引的,因为DBMS要每条记录帮你算一次才知道符不符合条件.
这才是正确的解决方案。全文检索,从来就不是数据库的强项。而like 非常类似全文检索
mysql 好象是不能建temp table 的。
另外需要注意的是Mysql在每个database里的表要在50个以内,否则效率下降很快。还有,Mysql单个表的数据量在200万以内是比较合适的,如果这个数量级的时候效率很低,就需要考虑是不是你的语句有问题。
另外需要注意的是Mysql在每个database里的表要在50个以内,否则效率下降很快。还有,Mysql单个表的数据量在200万以内是比较合适的,如果这个数量级的时候效率很低,就需要考虑是不是你的语句有问题。
看看google等搜索引擎的做法。你的数据量不过是小巫见大巫,呵呵。用lucene全文检索也是一个方案。更正:MySql是有临时表的。本人用过哦。呵呵
http://www.cnblogs.com/freeliver54/archive/2009/01/05/1369504.html
lucenes是apache的一个项目,专注于文本索引的。。可以去官网看看。。