2014-04-15 82 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上修复表命令。