该查询使用cakephp来调用数据库,这是查询:

find('all', array(
    'conditions' => array(
    'OR' => array(
        'PdfFolder.is_global' => true,
        'PdfFoldersUser.user_id' => $this->Auth->user('id'))
    ),
    'recursive' => 0,
    'order' => array('PdfFolder.is_global DESC', 'PdfFolder.name')


pdffolder表大约有2100条记录,但是包含pdf_folder_id和user_id的关系表包含近30000条记录。有时,此查询最多需要35秒才能运行。我没有设置代码,而且我不是数据库专家,但作为开发人员,这才让我失望。

看起来每个表的id都设置为主键,这就是我看到的所有索引。

感谢您的任何建议。

编辑

表结构

使用者

| id (index) | role_id | username | password | email |


pdf_folders

| id (index) | name | date_created | is_global(bool) |


pdf_folders_users

| id (index) | folder_id | user_id (now an index) |


pdf文件

| id (index) | parent_id | pdf_folder_id | ...more file information

最佳答案

首先在user_id字段上添加索引-

CREATE INDEX FK_user_id ON PdfFoldersUser (user_id)


如果您发布了每个相关表的完整表结构,这将有所帮助。

09-25 10:32