2013-06-25 38 views
0

我有一个非常简单和直接的SQL查询,需要100多秒才能完成。表中有大约10,000行数据被搜索。我能做些什么来加速这个查询?如何优化这个简单的SQL查询?

该查询搜索是表结构..

id (int 10) 
forumId (varchar 255) 
username (varchar 255) 
email (varchar 255) 
timestamp (int 10) 

例如查询是..

SELECT * FROM users WHERE forumId = 'minecraft' AND username = 'test' 

它正在超过100秒

+0

您的表上的任何索引?你能展示一个执行计划吗? –

+0

'forumId'可能是'ENUM'。您还可以将一个索引添加到'forumId'和'username'。 –

+2

对于只有10K条记录,我会怀疑有一些锁定或发生了什么 - 表扫描不应该花费那么长时间。除非你的行包含大BLOB或什么? – Blorgbeard

回答

7

添加化合物指数,

ALTER TABLE ADD INDEX(forumId, username) 

也将您的字符串长度降低到约75 :)

+0

+1我讨厌处理多个字符串过滤器,复合索引是目前最好的方法。 – KaeL

+2

'+ 1'为索引,但我不认为降低字符串长度应该会提高性能(尽管我不是mySql专家) –

+2

@MikeChristensen:[“Filesort使用固定长度的行存储格式类似于由MEMORY存储引擎使用,VARCHAR等可变长度类型使用固定长度存储。“](http://dev.mysql.com/doc/refman/5.7/zh/order-by-optimization.html )如果OP对这个表进行排序,并且MySQL选择使用filesort,则MySQL将在磁盘上构建一个每个这些列都需要255个字符的结构。这可能会导致很多磁盘I/O。 –