2012-02-15 83 views
0

查詢使用CakePHP的撥打電話到數據庫中,這裏是查詢:加快mysql查詢?

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 
+0

是該表上的索引是什麼? – 2012-02-15 14:29:40

+0

只是將每個表的id設置爲主表 – Patcouch22 2012-02-15 14:31:02

回答

3

開始通過USER_ID字段添加索引 -

CREATE INDEX FK_user_id ON PdfFoldersUser (user_id) 

如果您發佈的全表結構,爲每個這將有助於相關表格。

+0

添加的表結構。 – Patcouch22 2012-02-15 16:09:01

+0

添加user_id索引是否可以提高性能?什麼是正在執行的實際SQL? – nnichols 2012-02-15 16:40:14

+0

似乎沒有工作。我將如何去獲取cakephp中的實際SQL? – Patcouch22 2012-02-16 17:11:15

1

@ patcouch22

看到你的SQL視圖

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

看到它在控制器

$this->render('sql');