PHP和MySQL:优化数据库

时间:2010-03-04 17:55:11

标签: php mysql optimization

我有一个超过10,000,000行的数据库。现在查询它可能需要几秒钟才能找到一些基本信息。这不是首选,我知道优化的最佳方法是尽可能减少行数,但现在我没有时间这样做。

优化MySQL数据库的最简单方法是什么,以便在查询时,所花费的时间很短?

我不介意数据库的大小,这并不重要,因此任何增加大小的优化都可以。我对优化不是很了解,现在我已经建立了索引,但我不确定我能从那里获得多少好处。

我最终会正确地削减数据库,但是有一个快速的临时解决方案吗?

6 个答案:

答案 0 :(得分:2)

除了已建议的索引之外,如果分区表很大,您可能还需要查看分区表。

Partitioning in MySQL

这里很难具体,因为我们的信息非常有限,但正确的索引以及分区可能会有很长的路要走。正确索引可能是一个很长的主题,但从一般意义上讲,您将要对您查询的列进行索引。

例如,假设您有一个员工表,并且您拥有常用的SSN,FNAME,LNAME列。除了这些列之外,我们还会说表中还有10列。

现在您有了这个问题:

SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';

忽略SSN可能是主键并且可能已经有唯一索引的事实,您可能会通过创建包含列的另一个复合索引(SSN,FNAME, L-NAME)。这是有益的原因是因为数据库可以通过简单地查看复合索引来满足此查询,因为它包含排序和紧凑空间中所需的所有值。 (即I / O较少)。尽管SSN上的索引只是进行全表扫描的更好的访问方法,但数据库仍然必须读取索引(I / O)的数据块,找到包含指向记录的指针的值。需要满足查询,然后需要读取不同的数据块(读取:更随机的I / O),以便检索fname和lname的实际值。

这显然非常简化,但以这种方式使用索引可以大大减少I / O并提高数据库的性能。

此处的其他一些链接可能会对您有所帮助:

答案 1 :(得分:2)

正如我可以看到你从数据库请求40k行,这个数据加载需要时间来传输。

另外,永远不要问“一般如何改进”。没有“一般”优化的方法。优化始终是对您的特定案例进行概况分析和研究的结果。

答案 2 :(得分:1)

经常在您搜索的列上使用索引。

答案 3 :(得分:1)

在您的示例中,'WHERE x = y',如果y是列名,则也使用y创建索引。

带索引的键是你的选择查询的结果#应该比较整个表大约3%~5%,它会更快。

也有助于表的帮助。我不知道怎么做,主要是DBA任务。 对于DBA来说,如果他们这样做,这是一项简单的任务。

答案 4 :(得分:1)

如果您正在进行排序或复杂查询,则可能需要使用多列索引。例如,如果您正在搜索x.name ='y'或x.phone ='z'的位置,则可能需要在名称,电话上添加索引。简化示例,但如果您需要这样做,您还需要进一步研究它:)

答案 5 :(得分:0)

您的查询是否使用索引?在您的选择查询上运行EXPLAIN会告诉您什么?

第一步(也是最简单的)将确保您的查询得到优化。

相关问题