mysql - 在 CakePHP 中确定要在 MySQL 中建立索引的列

标签 mysql database cakephp join indexing

我有一个网络应用程序,它的每个页面都会触发很多查询。随着越来越多的数据被添加到数据库中,我们注意到页面的加载时间越来越长。

在检查 PhpMyAdmin -> Status -> Joins 时,我们注意到这一点(数字为红色):

Select_full_join 348.6 k 不使用索引的连接数。如果此值不为 0,则应仔细检查表的索引。

  1. 如何确定是哪些联接导致了问题?所有的连接都应该受到同样的指责吗?
  2. 如何确定应为哪些列编制索引,以便获得适当的性能?

我们使用的是 CakePHP + MySQL,查询都是自动生成的。

最佳答案

我一直使用的经验法则是,如果我使用连接,则需要为我连接的字段建立索引。

例如,如果您有如下查询:

SELECT t1.name, t2.salary
    FROM employee AS t1 
    INNER JOIN info AS t2 ON t1.name = t2.name;

t1.name 和 t2.name 都应该被索引。

下面也有一些很好的读物:

Optimizing MySQL: Importance of JOIN Order

How to optimize MySQL JOIN queries through indexing

一般来说,这个人的网站也有一些不错的信息。

MySQL Optimizer Team

编辑:这总是有帮助的。

如果您有权访问您的服务器设置,请查看:

MySQL Slow Server Logs

一旦您有了慢速查询的日志,您就可以对它们使用解释来查看需要索引的内容。

关于mysql - 在 CakePHP 中确定要在 MySQL 中建立索引的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376267/

相关文章:

mysql - 此查询仍返回空标题字段?

javascript - 数据表不想从 API 中提取数据

php - CakePHP GroupBy 以结构化格式显示所有行

mysql - 如何在cakephp中以时间间隔从数据库获取前一天的数据?

php - 如何执行存储在 MySQL 数据库中的 PHP 函数

mysql - mysql 计算大表中行的性能

sql - 从不同模式的现有表创建表?

php - Cakephp 在登录基础上选择数据库

php - cakephp 找到 ('list' ) 选择框的多列

php - 使用php从mysql获取html数据中的下拉列表