使用比较运算符时的MYSQL性能

使用比较运算符时的MYSQL性能,mysql,database,performance,query-optimization,Mysql,Database,Performance,Query Optimization,我有一个mysql数据库,其中一个表有大约40k个条目。执行以下语句大约需要10秒(已选择数据库): 从MyTable中选择*,其中列

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

从MyTable中选择*,其中列<3

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

编辑:

以下查询

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
以下查询显示列中值的分布

SELECT COUNT(*), Column FROM MyTable GROUP BY Column;
结果如下:

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
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

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

CREATE INDEX idx_MyTable_Column ON MyTable (Column);
尝试在创建索引之前和之后比较
EXPLAIN
的输出:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
EXPLAIN从MyTable中选择*列<3;
您应该看到,使用索引执行索引扫描(或更好)

只有当一组足够小的行符合您的条件时,索引才会对您有所帮助。如果大多数表与表达式
列<3
匹配,则索引将没有帮助,计划者将返回到表扫描,因为这将比使用索引更快


如果你想要一个更详细的答案,那么你必须提供更多的信息。这两个查询的输出将非常有用:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
SELECT COUNT(*), Column FROM MyTable GROUP BY Column;
EXPLAIN从MyTable中选择*列<3;
从MyTable GROUP BY Column中选择COUNT(*),Column;

以及
MyTable

上的索引列表,我冒昧地猜测,
列上没有索引。尝试创建一个:

CREATE INDEX idx_MyTable_Column ON MyTable (Column);
尝试在创建索引之前和之后比较
EXPLAIN
的输出:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
EXPLAIN从MyTable中选择*列<3;
您应该看到,使用索引执行索引扫描(或更好)

只有当一组足够小的行符合您的条件时,索引才会对您有所帮助。如果大多数表与表达式
列<3
匹配,则索引将没有帮助,计划者将返回到表扫描,因为这将比使用索引更快


如果你想要一个更详细的答案,那么你必须提供更多的信息。这两个查询的输出将非常有用:

EXPLAIN SELECT * FROM MyTable WHERE Column < 3;
SELECT COUNT(*), Column FROM MyTable GROUP BY Column;
EXPLAIN从MyTable中选择*列<3;
从MyTable GROUP BY Column中选择COUNT(*),Column;

以及
MyTable

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

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


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

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


您应该使用ApacheSolr作为索引,速度太快,例如使用ApacheSolr instagram Netflix、eBay、Digg、AOL等

你读过关于ApacheSolr。。我相信你会的 更多参考资料


您应该使用ApacheSolr作为索引,速度太快,例如使用ApacheSolr instagram Netflix、eBay、Digg、AOL等

你读过关于ApacheSolr。。我相信你会的 更多参考资料


感谢您的快速响应,我添加了查询的输出。似乎只有一小部分符合标准(<3)。我似乎已经在使用索引了。
可能的\u键
在select输出中为
NULL
——这意味着没有任何索引对该查询有用。请在这张表上添加索引列表。啊,那是我的错误。。。我索引错了列。现在查询大约需要0.0005秒。除了使用索引,还有其他方法加快速度吗?可能,但在0.0005秒时,我不确定其他任何方法是否会产生任何实质性影响。:)感谢您的快速响应,我添加了查询的输出。似乎只有一小部分符合标准(<3)。我似乎已经在使用索引了。
可能的\u键
在select输出中为
NULL
——这意味着没有任何索引对该查询有用。请在这张表上添加索引列表。啊,那是我的错误。。。我索引错了列。现在查询大约需要0.0005秒。除了使用索引,还有其他方法加快速度吗?可能,但在0.0005秒时,我不确定其他任何方法是否会产生任何实质性影响。:)我真的不认为“此查询性能差”的答案是“使用其他数据库引擎”。我真的不认为“此查询性能差”的答案是“使用其他数据库引擎”