2012-07-22 26 views
1

我有一個表在我的數據庫:PHP MySQL的慢查詢訪問

enter image description here

而且我使用MySQL來插入/更新/創建信息但是它需要執行查詢的時間較慢例如:

首先,當用戶運行我的應用程序會檢驗他們可以通過檢索數據庫中的所有IP地址與

SELECT IP FROM user_info 

然後使用while循環,如果IP是在使用它DB做另一個查詢:

"SELECT Valid FROM user_info WHERE IP='".$_SERVER['REMOTE_ADDR']."'"" 

如果有效的是1,那麼他們可以使用它,否則他們無法但是如果在數據庫中沒有找到自己的IP它將使用

"INSERT INTO user_info (IP,First) VALUES ('".$_SERVER['REMOTE_ADDR']."','".date("Y/m/d") ."')")" 
爲他們的新條目

現在,第一個腳本已經完成訪問另一個腳本 - 這個腳本應該每分鐘更新一次數據庫,但我認爲我現在不能完成這個腳本;更新查詢是這樣的:

"UPDATE user_info SET Name='".$Name."', Status='".$Status."', Last='".$Last."', Address='".$Address."' WHERE IP='".$_SERVER['REMOTE_ADDR']."'")" 

總之它需要平均2.2秒和

我的問題是我如何加快MySQL的查詢,那麼ATM機只有1行的表?我已閱讀過有關索引以及它們如何幫助提高性能的知識,但我不完全瞭解如何使用它們。關於這個話題的任何燈光都會有所幫助。

Nubcake

+0

有時像'服務mysqld重啓'這樣簡單的事情可能會使詭計... – nico 2012-07-22 18:19:24

回答

3

指標作爲您的網站成長將變得非常重要,但是當你在你的表只有一個,它不可能是爲什麼你的查詢需要這麼久的原因,他們不會幫助。你的數據庫似乎有一些基本問題。也許這是一個延遲問題。

嘗試從SELECT * FROM users LIMIT 1或甚至只是SELECT 1等一些更簡單的查詢開始,看看你是否仍然表現不佳。

+0

我不打算有1行但更多,我會嘗試你說的,我通過EasyPHP運行在本地主機上那有所作爲? – Nubcake 2012-07-22 18:08:02

+0

當我使用SELECT * FROM用戶時需要1秒極限1 – Nubcake 2012-07-22 18:11:27

+0

Nubcake:這真的很糟糕,即使沒有索引,查詢也應該很快。怎麼樣'SELECT 1'? – 2012-07-22 18:12:49

-1

您可以製作IP主鍵和索引

+0

這有什麼用?請解釋 – Nubcake 2012-07-22 18:08:27

+0

它在索引時搜索和更新行時速度更快。 – 2012-07-22 18:09:44

+0

嘗試並使用mysql在shell中運行查詢 - 並查看它是否不是php/webserver性能問題。 – 2012-07-22 18:10:51

1

查詢數量越少,系統的延遲越小。嘗試合併在同一張表上進行的查詢。例如,你的第二個和第三個查詢可以被合併,你可以執行

INSERT INTO user_info ...... WHERE Valid=1 AND IP= ... 

檢查受災知道是否加入或沒有新行的行數。

另外,不要打開/關閉在之間的任何一點你的SQL連接。建立新連接的開銷可能很高。

+0

我可以嘗試合併查詢,但您認爲它會節省很多時間嗎?至於關閉連接,我只關閉腳本末尾的連接。 – Nubcake 2012-07-22 18:18:08

+0

在這種情況下,它看起來像是一個配置問題。嘗試重新安裝。 – 2012-07-22 18:24:58