MySQL是一个搜索大型表的高效系统吗?

时间:2011-12-22 17:21:06

标签: mysql

假设我有一张大桌子,大约200万行和50列。使用MySQL,搜索整个列的特定值是多少,然后返回所述值的行号? (假设在整个列中随机分布值)

如果此类操作需要较长时间,我该怎么做才能加快速度?

6 个答案:

答案 0 :(得分:7)

如果有问题的列被编入索引,那么它的速度非常快。

尽管如此,不要对索引进行讽刺。您拥有的索引越多,写入的成本就越高(插入/更新/删除)。此外,它们占用磁盘空间和RAM(并且可以很容易地比表本身大)。索引有利于查询,不利于写作。明智地选择。

我们在这里说的速度究竟有多快?这取决于您的数据库机器的配置。如果它没有足够的RAM来托管索引和数据,操作可能会受磁盘限制,性能会降低。同样会减少没有索引的操作。假设机器很好,这还取决于选择性您的索引的方式。如果你有一个包含10M行的表,并且使用布尔值对列进行索引,那么性能只会略有提高。否则,如果您使用许多不同的值(用户电子邮件)索引列,则查询将数量级更快。

此外,根据现代标准,2M行的表格相当小: - )

答案 1 :(得分:4)

数据结构在这里有很大的不同,因为它会影响你的索引能力。看看mysql索引选项(全文等)。

答案 2 :(得分:4)

这个问题没有简单的答案,它取决于您的数据的更多参数。正如许多其他人已经建议的那样,在您必须搜索的列上创建索引(对于完全匹配,或字符串开头)将非常有效。

例如,我有一个MyISAM表,其中包含27,000,000条记录(大小为6.7 GB),其中包含VARCHAR(128)字段的索引。

以下是两个示例查询(实际数据),可以为您提供一个想法:

mysql> SELECT COUNT(*) FROM Books WHERE Publisher = "Hachette";
+----------+
| COUNT(*) |
+----------+
|    15072 |
+----------+
1 row in set (0.12 sec)

mysql> SELECT Name FROM Books WHERE Publisher = "Scholastic" LIMIT 100;
...
100 rows in set (0.17 sec)

所以,是的,我认为MySQL肯定足够快,可以做你计划做的事情:)

答案 3 :(得分:1)

在该列上创建索引。

答案 4 :(得分:1)

在相关列上创建索引,性能应该不是问题。

答案 5 :(得分:1)

通常 - 在列

上添加索引