假设我有一张大桌子,大约200万行和50列。使用MySQL,搜索整个列的特定值是多少,然后返回所述值的行号? (假设在整个列中随机分布值)
如果此类操作需要较长时间,我该怎么做才能加快速度?
答案 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)
通常 - 在列
上添加索引