2014-04-15 83 views
2

我有一個非常簡單的MySQL表運行速度非常慢,我不明白爲什麼。非常慢的mysql表

結構爲:

id    int(11)  (Primary Key)   
username   varchar(64) (Index)    
password   varchar(64)     
pws    varchar(16)     
default_password varchar(32)     
session_id  varchar(64)     
license_number int(10)  (Index)   
contact_name  varchar(64)     
phone   varchar(16)     
first_login_date datetime     
last_login_date datetime     
status   tinyint(4)    
test_mode  tinyint(4)    
email   varchar(64)     
email_verified tinyint(4) 

只有80表中的一些行,但下面的查詢了67秒

SELECT * FROM `users` ORDER BY `username` ASC 

幾乎在這張桌子上的任何操作是非常慢。我做錯了什麼,或者我應該從哪裏開始挖掘?

作爲一個方面,我還有另一個更復雜的表格,它有20,000行,運行速度非常快。

**更新...修復數據庫和優化幫助選擇。這似乎更新極慢,雖然,然後放慢選擇...

$this->db->update("UPDATE users SET session_id='' WHERE id=:userid", array(":userid" => $this->getUserId())); 

這裏是我使用的PHP數據庫代碼:

class Database extends PDO 
{ 

    public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS) 
    { 

     $this->handleDB = new PDO($DB_TYPE.':host='.$DB_HOST.';dbname='.$DB_NAME, $DB_USER, $DB_PASS); 
     $this->handleDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    } 

public function update($sql, $array = array()) 
    { 
     $sth = $this->handleDB->prepare($sql); 
     foreach ($array as $key => $value) { 


      if(is_int($value)){ 
       $sth->bindValue("$key", $value, PDO::PARAM_INT); 
      }else{ 
       $sth->bindValue("$key", $value, PDO::PARAM_STR); 
      } 



     } 

     $sth->execute(); 

     return $sth->rowCount(); 
    } 
    } 
} 

謝謝!

+1

嘗試運行'check table users;'查看錶中是否有任何問題。 http://dev.mysql.com/doc/refman/5.0/en/check-table.html –

+1

我會猜測還有另一個進程在該表上有一個鎖,而你的手動查詢可能正在等待他們。這是什麼類型的應用程序?上面和/或ANALYZE TABLE'用戶'的 – musicliftsme

+0

; REPAIR TABLE'用戶'。查詢前面的'EXPLAIN'可能會顯示一些有用的信息 –

回答

1

您可以檢查兩件事情,如果您正在客戶端機器上運行查詢,請檢查您的網絡速度到服務器。如果查詢在服務器上運行緩慢,則可以檢查Mysql服務器上的慢速查詢日誌。其次,您嘗試在表格上重新創建索引。嘗試檢查表,在MySql上修復表命令。