2010-08-02 61 views
0

当我检索满足特定条件的记录时,我有一张包含多于4万条记录的表,它需要很长时间。在从mysql中检索一千条记录时提高性能

有没有解决方案来提高性能?

+0

什么是“更多4条记录”? – 2010-08-02 11:21:16

+0

我假设你已经建立了一个索引? – relet 2010-08-02 11:22:44

+1

40000行在数据库方面不算什么。您可能会做一些糟糕的事情,使您的数据库像 – 2010-08-02 11:25:17

回答

2

如果您正在根据不是主键的另一列进行大量查询,请尝试向放置在WHERE子句中的列添加索引。

此外,如果您使用任何方式,优化JOIN将有所帮助。

+0

缓慢的索引在从数据库检索数据时提高性能,但在将数据输入到表中时需要时间。 – chetan 2010-08-11 07:01:57

+0

还有其他解决方案吗? – chetan 2010-08-11 07:02:23

0

你也可以运行explain命令,例如'explain select * from mytable where someField ='Something'; '看看它会返回什么,但我认为'索引'解决方案应该足够好。

另外,也许你可以考虑拆分成几张简单的表格。我不知道你的结构是什么,但我在过去的例子中已经看到过,例如,人们会将冗余数据保存在同一个表中,例如:在同一个表中有客户名称和地址,在那里可以将它分为客户和地址,然后仅在一个表上执行查询。

希望这会有所帮助。

+0

你是对的,人们应该规范化他们的数据,那只是DBA 101.但他的问题是数据检索性能,规范化并没有帮助!恰恰相反:) – 2010-08-02 11:42:01

+0

好吧,它帮助我在几年前工作的一些遗留项目上的表现,但我想每种情况都不同:) – Greg 2010-08-02 11:47:05

0

第一步:确定是否花费时间运行查询或将数据传回给您。

多久需要运行这个查询 -

SELECT COUNT(*) 
FROM 
([your query that returns 40k rows]) AS butts; 

如果是快速的,那么大部分的时间大概花了将数据传输回客户端。研究使用MySQL的压缩。

如果服务器花费很长时间处理查询,那么可能会通过适当的规范化和索引使用来解决问题,正如其他人在此提到的那样。为了帮助优化特定的查询,您应该粘贴所有涉及表的CREATE TABLE和查询本身。

0

SQL的另一个简单优化是从表中返回更少的列。如果您只显示SQL表中的两个字段,则不需要检索其余字段,除非有人需要查看它们以获取特定记录。

相关问题