首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海量数据库和mysql

海量数据库和mysql
EN

Stack Overflow用户
提问于 2011-01-20 19:32:37
回答 2查看 443关注 0票数 3

我们正在工作的一个新项目需要大量的数据分析,但我们发现这是非常缓慢的,我们正在寻找方法来改变我们的方法与软件和/或硬件。

我们目前在亚马逊ec2实例(Linux)上运行:

代码语言:javascript
复制
High-CPU Extra Large Instance

7 GB of memory
20 EC2 Compute Units (8 virtual cores with 2.5 EC2 Compute Units each)
1690 GB of instance storage
64-bit platform
I/O Performance: High
API name: c1.xlarge


processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz
stepping        : 5
cpu MHz         : 2133.408
cache size      : 4096 KB

MemTotal:      7347752 kB
MemFree:        728860 kB
Buffers:         40196 kB
Cached:        2833572 kB
SwapCached:          0 kB
Active:        5693656 kB
Inactive:       456904 kB
SwapTotal:           0 kB
SwapFree:            0 kB

db的一个部分是文章和实体以及链接表,例如:

代码语言:javascript
复制
mysql> DESCRIBE articles_entities;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | char(36)     | NO   | PRI | NULL    |       | 
| article_id | char(36)     | NO   | MUL | NULL    |       | 
| entity_id  | char(36)     | NO   | MUL | NULL    |       | 
| created    | datetime     | YES  |     | NULL    |       | 
| modified   | datetime     | YES  |     | NULL    |       | 
| relevance  | decimal(5,4) | YES  | MUL | NULL    |       | 
| analysers  | text         | YES  |     | NULL    |       | 
| anchor     | varchar(255) | NO   |     | NULL    |       | 
+------------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

正如您从下表中看到的,我们有许多关联以每天100,000+的速度增长

代码语言:javascript
复制
mysql> SELECT count(*) FROM articles_entities;
+----------+
| count(*) |
+----------+
|  2829138 | 
+----------+
1 row in set (0.00 sec)

像下面这样的简单查询花费了太多时间(12秒)

代码语言:javascript
复制
mysql> SELECT count(*) FROM articles_entities WHERE relevance <= .4 AND relevance > 0;
+----------+
| count(*) |
+----------+
|   357190 | 
+----------+
1 row in set (11.95 sec)

我们应该考虑什么来改善我们的查找时间?不同的数据库存储?不同的硬件。

EN

回答 2

Stack Overflow用户

发布于 2011-01-20 20:23:38

对于键,使用char(36)并不是使用MySQL所能做到的最快速度。如果可能,对键使用INT-type。如果索引CHAR列,与(大的)INT索引相比,索引将非常大(如果没有‘正确’创建)

但是,如果您的列值不是数字,那么您就只能使用CHAR列(它仍然比VARCHAR快,但可以创建大的索引)。

请提供表的SHOW CREATE TABLE以查看键/索引参数,并且正如前面的回答所说,对有问题的查询进行解释可以帮助提供更好的答案。

PS。使用SHOW TABLE STATUS LIKE '{table_name}'查看表的索引(和数据)大小。

票数 2
EN

Stack Overflow用户

发布于 2011-01-20 20:10:02

当涉及到查询性能时,有三件事很重要:

索引。记忆。其他的一切。

首先要做的是检查索引。对您的查询进行解释,以了解MySQL是如何处理它们的。

如果这看起来很合理,那么下一件事就是检查内存。您的总数据库有多大?如今内存很便宜,从内存运行的查询将比必须从磁盘读取的查询快得多。

在您探索了这些之后,如果性能仍然很慢,那么可能是时候考虑其他选项了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4746569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档