有一个大的数据库,1,000,000,000行,称为线程(这些线程实际存在,我不是因为我喜欢它而使事情变得更难).线程中只有一些东西,以加快速度:(int id,string hash,int replycount,int dateline(timestamp),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-1M).但是因为有一些大约有10M的记录,一些查询仍然会变慢(0.1/.2秒,对我的应用来说太多了!我已经在使用索引!).
我不知道如何使用MySQL改进这一点.有办法吗?
对于这个项目,我将使用10台服务器(12GB内存,4x7200rpm硬盘,软件raid 10,四核)
这个想法是简单地在服务器之间拆分数据库,但是上面解释的问题仍然没有得到解决.
如果我在这10台服务器上安装cassandra(通过假设我找到时间让它按预期工作)我应该假设性能提升吗?
我该怎么办?继续使用MySQL与多台机器上的分布式数据库或构建一个cassandra集群?
我被要求发布索引是什么,这里是:
mysql> show index in thread;
PRIMARY id
forumid
dateline
replycount
Run Code Online (Sandbox Code Playgroud)
选择说明:
mysql> explain SELECT * FROM thread WHERE forumid = 655 AND visible = 1 AND open …Run Code Online (Sandbox Code Playgroud) 我有一个拥有6000万条目的数据库.
每个条目包含:
我需要选择某个月的参赛作品.每个月包含大约200万条目.
select *
from Entries
where time between "2010-04-01 00:00:00" and "2010-05-01 00:00:00"
Run Code Online (Sandbox Code Playgroud)
(查询大约需要1.5分钟)
我还想从给定的DataSourceID中选择某个月的数据.(大约需要20秒)
大约有50-100个不同的DataSourceID.
有没有办法让这更快?我有什么选择?如何优化此数据库/查询?
编辑:有约.每秒60-100次插入!
我是一名科学家,我使用MySQL作为数值模拟结果的存储空间.通常我有一组通过我的实验和控制集获得的数据.这两个数据集存储在一个表中.一个指示器字段告诉我记录是来自实验还是来自控制集.该表通常有大约1亿条记录.5000万次实验和5000万次对照.
当我对数据进行后期处理时,我的典型任务包括首先发出以下两个查询:
select b0,t0 from results_1mregr_c_ew_f where RC='E' and df>60 /// getting experiments data
Run Code Online (Sandbox Code Playgroud)
和
select b0,t0 from results_1mregr_c_ew_f where RC='C' and df>60 /// getting controls data
Run Code Online (Sandbox Code Playgroud)
我在RC上有一个多列索引,df.这些查询需要花费大量时间,查询大部分时间都会花费"发送数据"
我在8核MacPro上使用12GB RAM运行它.我是这台机器的单个用户,这个任务是主要任务,因此我可以将所有RAM专用于MySQL.所有表都是MyISAM(我可以转换它们,如果这会增加我的查询速度).
我很感激有关如何加快这些查询的任何建议.我应该更改一些设置,索引,查询....
在每个查询中,我希望能够获得大约5000万条记录. 请注意,由于管理原因,将表拆分为两个表,其中一个包含实验,另一个包含控制观察.
这是输出:
explain select b0, t0 from results_1mregr_c_ew_f where RC="C" and df>60
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+
| id |select_type|table |type |possible_keys|key|key_len|ref |rows |Extra |
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+
| 1 |SIMPLE |results_1mregr_c_ew_f|range|ff |ff |11 |NULL|6251121|Using where|
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+
Run Code Online (Sandbox Code Playgroud)
以下是来自的输出:
show indexes from results_1mregr_c_ew_f;
+-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | …Run Code Online (Sandbox Code Playgroud)