2016-09-30 198 views
-1

我有一个500k行的表。我有特定的表,这需要很长时间来运行每个查询。Mysql查询性能低下

其中一个查询的是:

SELECT * 
FROM player_data 
WHERE `user_id` = '61120' 
    AND `opzak` = 'ja' 
ORDER BY opzak_nummer ASC 

opzak_nummer柱是tinyint带编号。

说明:

enter image description here

有什么办法改善查询性能,该查询/表的一般?

表名是player_data,包含大约25列,其中大多数是具有统计值的整数。

该索引是id AUTO_INCREMENT。

+0

是您正在使用的任何指数。 – khalid

+0

性能问题应该包括EXPLAIN ANALYZE以及关于表格大小,索引,当前时间表现,期望时间等的一些信息。慢是一个相对术语,我们需要真正的价值来比较。 MySQL也请阅读[How-to-Ask](http://stackoverflow.com/help/how-to-ask) – e4c5

+0

说明SELECT * FROM player_data WHERE'user_id' ='61120' AND'opzak' = 'ja' ORDER BY opzak_nummer ASC – khalid

回答

0

针对该查询的最佳索引是任一这些:

INDEX(user_id, opzak, opzak_nummer) 
INDEX(opzak, user_id, opzak_nummer) 

前两列执行滤波;最后一个避免了一个tmp表并通过使用ORDER BY进行排序。

是否有任何组合的列'独特'(除id)?如果是这样,我们可能能够让它跑得更快。

+0

'id是唯一唯一的。我没有得到你的答案的第一部分,什么是'INDEX(user_id,opzak,opzak_nummer)INDEX(opzak,user_id,opzak_nummer)',我该如何避免tmp表? – TheUnreal

+0

这两个索引中的任何一个都应避免_that_查询的tmp表。见[_Cookbook_](https://mariadb.com/kb/en/mariadb/building-the-best-index-for-a-given-select/) –