加快mysql查询?

时间:2012-02-15 14:28:15

标签: mysql cakephp indexing

查询使用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

2 个答案:

答案 0 :(得分:3)

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

CREATE INDEX FK_user_id ON PdfFoldersUser (user_id)

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

答案 1 :(得分:1)

@ patcouch22

在视图中查看您的sql

<?php echo $this->element('sql_dump'); ?>

在控制器中看到它

$this->render('sql');