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'可能会显示一些有用的信息 –