1

我有一个带有大约 40k 条目的表的 mysql 数据库。执行以下语句大约需要 10 秒(已选择数据库):

SELECT * FROM MyTable WHERE Column < 3

为什么这需要这么长时间,我该如何提高性能?
其他数据库更快吗?(例如 MongoDB、CouchDB、...) 不过我更喜欢使用 MySQL 数据库。

编辑:

以下查询...

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;

结果如下:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  Occurances  index   NULL    SearchString    102 NULL    40242   Using where; Using index

以下查询显示了 Column 中值的分布

SELECT COUNT(*), Column FROM MyTable GROUP BY Column;

结果如下:

COUNT(*)    Column
43      0
5       1
106     2
71      3
42      4
283     5
2337    6
9491    7
22073   8
1191    9
1064    10
1105    11
919     12
393     13
288     14
288     15
200     16
123     17
71      18
71      19
36      20
10      21
13      22
8       23
4       24
3       25
4       29
4

3 回答 3

3

我冒昧地猜测您在该Column列上没有索引。尝试创建一个:

CREATE INDEX idx_MyTable_Column ON MyTable (Column);

尝试比较EXPLAIN创建索引之前和之后的输出:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;

您应该看到使用索引执行了索引扫描(或更好)。

只有当足够小的行集符合您的条件时,索引才会对您有所帮助。如果大多数表与表达式匹配,Column < 3那么索引将无济于事,并且规划器将退回到表扫描,因为这会比使用索引更快。


如果您想要更详细的答案,则必须提供更多信息。这两个查询的输出会有所帮助:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
SELECT COUNT(*), Column FROM MyTable GROUP BY Column;

以及上的索引列表MyTable

于 2012-09-13T21:14:24.637 回答
1

您应该使用 Apache Solr 作为索引,但速度会太快,例如使用 Apache Solr instagram Netflix、eBay、Digg、AOL 等。

您阅读了有关 apache solr 的信息。我相信您会获得更多参考

apache solr http://lucene.apache.org/solr

维基 apache solr

于 2012-09-13T21:30:46.987 回答
0

对于 40k 条记录的简单选择,这似乎异常缓慢。如果表太大而无法存储在内存中(即可用内存非常少或者您将大文件直接存储在表中),那么 MySQL 将花费更长的时间来运行查询。

对列进行索引也会产生巨大的差异,尽管对于一个适合内存的表来说,即使在条件列上没有索引,10 秒似乎非常慢。

为什么 MySQL 对大表可能会很慢?

于 2012-09-13T21:23:09.767 回答