首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和MySQL:优化数据库

PHP和MySQL:优化数据库
EN

Stack Overflow用户
提问于 2010-03-05 01:55:11
回答 6查看 2.3K关注 0票数 3

我有一个超过10,000,000行的数据库。现在查询它可能需要几秒钟的时间来查找一些基本信息。这并不可取,我知道优化的最好方法是最小化可能的行数,但现在我没有时间这样做。

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

我不介意数据库的大小,这真的无关紧要,所以任何增加大小的优化都可以。我不太擅长优化,现在我已经建立了索引,但我不确定我能从那里得到多大的改善。

我最终会对数据库进行适当的裁剪,但是有没有一个快速的临时解决方案?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-05 02:20:06

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

Partitioning in MySQL

在这里很难具体说明,因为我们的信息非常有限,但是正确的索引和分区可能会有很大的帮助。正确的索引可以是一个很长的主题,但在非常一般的意义上,您将希望对查询所针对的列进行索引。

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

现在,您有了这个查询:

代码语言:javascript
复制
SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-03-05 04:58:05

正如我所看到的,您从数据库请求40k行,这种数据加载只需要时间来传输。

此外,永远不要问“如何在总体上改进”。没有“通用”优化的方法。优化始终是对您的特定案例进行分析和研究的结果。

票数 2
EN

Stack Overflow用户

发布于 2010-03-05 01:57:01

对经常搜索的列使用索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2381533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档