MySQL和NoSQL:帮助我选择正确的有一个很大的数据库,1,000,000,000行,称为线程(这些线程实际上存在,我不会仅仅因为我喜欢它就让事情变得更困难)。线程中只有几个东西,以加快速度:(int id、String散列、int应答计数、int dateline(时间戳)、int forumid、String title)查询:select * from thread where forumid = 100 and replycount > 1 order by dateline desc limit 10000, 100因为有1G的记录,这是一个很慢的查询。所以我想,让我们把这1G的记录分成几张表格,就像我拥有的一样多的论坛(类别)!差不多完美了。有很多表,我的搜索记录较少,而且速度更快。查询现在变成:select * from thread_{forum_id} where replycount > 1 order by dateline desc limit 10000, 100这真的更快,99%的论坛(类别),因为其中大多数只有少数几个主题(100k-100万)。然而,由于有一些记录大约有1000万条,所以有些查询仍然要慢下来(0.1/2秒),对于我的应用程序来说太慢了!我已经在用索引了!).我不知道如何使用MySQL来改进它。有办法吗?对于这个项目,我将使用10台服务器(12 GB内存,4x7200 rpm硬盘上的软件RAID 10,四核)这样做的目的是简单地将数据库拆分到服务器之间,但是由于上面解释的问题,这个问题仍然是不应该存在的。如果我在这10台服务器上安装了Cassandra(假设我找到了使其正常工作的时间),那么是否应该提高性能呢?我该怎么办?在多台机器上继续使用带有分布式数据库的MySQL,还是构建Cassandra集群?我被要求发布什么是索引,如下所示:mysql> show index in thread;PRIMARY id
forumid
dateline
replycount选择“解释”:mysql> explain SELECT * FROM thread WHERE forumid = 655 AND visible = 1 AND open <> 10 ORDER BY dateline ASC LIMIT 268000, 250;+----+-------------+--------+------+---------------+---------+---------+-------------+--------+-----------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+------+---------------+---------+---------+-------------+--------+-----------------------------+| 1 | SIMPLE | thread | ref | forumid | forumid | 4 | const,const | 221575 | Using where; Using filesort | +----+-------------+--------+------+---------------+---------+---------+-------------+--------+-----------------------------+
3 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
添加回答
举报
0/150
提交
取消