我有一个超过10,000,000行的数据库。现在查询它可能需要几秒钟的时间来查找一些基本信息。这并不可取,我知道优化的最好方法是最小化可能的行数,但现在我没有时间这样做。
优化MySQL数据库的最简单方法是什么,以便在查询该数据库时所用的时间较短?
我不介意数据库的大小,这真的无关紧要,所以任何增加大小的优化都可以。我不太擅长优化,现在我已经建立了索引,但我不确定我能从那里得到多大的改善。
我最终会对数据库进行适当的裁剪,但是有没有一个快速的临时解决方案?
发布于 2010-03-05 02:20:06
除了已经建议的索引之外,如果分区表很大,您可能还想要查看它们。
Partitioning in MySQL
在这里很难具体说明,因为我们的信息非常有限,但是正确的索引和分区可能会有很大的帮助。正确的索引可以是一个很长的主题,但在非常一般的意义上,您将希望对查询所针对的列进行索引。
例如,假设您有一个雇员表,并且您有常用的SSN、FNAME、LNAME列。除了这些列之外,我们还会说表中还有另外10列。
现在,您有了这个查询:
SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';忽略这样一个事实:SSN可能是这里的主键,并且可能已经有一个惟一的索引,通过创建另一个包含列(SSN、FNAME、LNAME)的复合索引,您可能会看到性能上的好处。这是有益的,因为数据库可以通过简单地查看复合索引来满足该查询,因为它包含排序和紧凑空间中所需的所有值。(即,较少的I/O)。即使仅SSN上的索引是执行全表扫描的更好的访问方法,数据库仍然必须读取索引的数据块( I/O),找到包含满足查询所需记录的指针的值,然后将需要读取不同的数据块(读取:更随机的I/O),以便检索fname和lname的实际值。
这显然非常简单,但是以这种方式使用索引可以极大地减少I/O并提高数据库的性能。
这里的其他一些链接可能会对您有所帮助:
发布于 2010-03-05 04:58:05
正如我所看到的,您从数据库请求40k行,这种数据加载只需要时间来传输。
此外,永远不要问“如何在总体上改进”。没有“通用”优化的方法。优化始终是对您的特定案例进行分析和研究的结果。
发布于 2010-03-05 01:57:01
对经常搜索的列使用索引。
https://stackoverflow.com/questions/2381533
复制相似问题