PHP 和 MySQL : optimize database

标签 php mysql optimization

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

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

我不介意数据库的大小,这并不重要,所以任何增加大小的优化都可以。我不太擅长优化,现在我已经设置了索引,但我不确定我能从那里得到多少。

我最终会适本地缩减数据库,但是有没有快速的临时解决方案?

最佳答案

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

Partitioning in MySQL

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

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

现在你有这个查询:

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

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

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

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

关于PHP 和 MySQL : optimize database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381533/

相关文章:

php - 使用 PHP myadmin 的登录系统无法正常工作

java - 如何从 HackerEarth 优化这个练习?

php - 根据重复值对 PHP 数组进行排序

php - Symfony2 : how to log query duration to logs/dev. 日志

javascript - 使用类元素和 Javascript 进行线钳位

python - 使用 optimize.fmin_l_bfgs_b 的错误收敛

javascript - 局部变量的访问时间比全局变量长 7 倍?

php - Laravel 中不存在多对多关系

MySQL 触发器与 IF THEN

php - 如何使用 PHP 从 MySql 数据库中删除用户