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();
}
}
}
謝謝!
嘗試運行'check table users;'查看錶中是否有任何問題。 http://dev.mysql.com/doc/refman/5.0/en/check-table.html –
我會猜測還有另一個進程在該表上有一個鎖,而你的手動查詢可能正在等待他們。這是什麼類型的應用程序?上面和/或ANALYZE TABLE'用戶'的 – musicliftsme
; REPAIR TABLE'用戶'。查詢前面的'EXPLAIN'可能會顯示一些有用的信息 –