从多行中选择时,MySQL的性能会降低

时间:2016-01-19 09:24:32

标签: php mysql mysql-workbench

我的表中有超过4000行数据。我注意到它变得非常慢,当我尝试从mysql工作台获取所有行时它甚至冻结。

经过一些试验和错误后,我注意到如果选择超过1544行,它只会冻结/低性能。

SELECT *  FROM users LIMIT 1544;

修改

以下是运行DESC Users

后的一些数据
Field,         Type,            Null,  Key,  Default, Extra
'id',          'int(10) unsigned','NO','PRI',NULL, 'auto_increment'
'email',       'varchar(255)',  'NO',  '',   NULL, ''
'password',    'varchar(255)',  'YES', '',   NULL, ''
'first_name',  'varchar(255)',  'YES', '',   NULL, ''
'last_name',   'varchar(255)',  'YES', '',   NULL, ''
'gender',      'varchar(15)',   'YES', '',   NULL, ''
'picture',     'varchar(255)',  'YES', '',   NULL, ''
'contact_number','varchar(255)','YES', '',   NULL, ''
'country',     'varchar(255)',  'YES', '',   NULL, ''
'state',       'varchar(255)',  'YES', '',   NULL, ''
'city',        'varchar(255)',  'YES', '',   NULL, ''
'dob',         'date',          'YES', '',   NULL, ''
'type',        'int(11)',       'NO',  '',   '1', ''
'verified',    'int(11)',       'NO',  '',   '0', ''
'is_first_login','int(11)',     'NO',  '',   '1', ''
'status',      'int(11)',       'NO',  '',   '1', ''
'remember_token','text',        'YES', '',   NULL, ''
'created_at',  'timestamp',     'NO',  '',   '0000-00-00 00:00:00', ''
'updated_at',  'timestamp',     'NO',  '',   '0000-00-00 00:00:00', ''

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

建议:

  1. 而不是*使用字段名称。
  2. 如果您需要一次性使用所有数据,则可以使用条件并使用限制。
  3. 如果您需要一些数据,那么您可以使用分页,加载其他数据,然后用户向下滚动。
  4. 您可以为其创建视图并调用视图。

答案 1 :(得分:0)

请为用于选择目的的列制作索引。也可以根据需要减少表结构数据类型长度

假设为Ex。 contact_number varchar(255)不是必需的,varchar(10)足够了。

这是优化表格和快速重播表格数据的最佳方式

答案 2 :(得分:0)

对于大型数据库,Mysql INDEX可以帮助解决速度问题,可以在表中创建索引,以便更快速有效地查找数据。所以必须创建索引,你可以在这里了解更多关于MYsql索引http://www.w3schools.com/sql/sql_create_index.asp