2016-04-25 110 views
2

如何优化此查询,以便在1000万行上花费80+秒以获得更快的结果。Mysql:如何优化此查询。以获得更快的结果

su_id和admin_id都是BTREE索引

SELECT su_id FROM members_ext WHERE admin_id = 5962789 

都是INT数据类型,以BTREE指数

su_id的基数是8496470和admin_id是10437

解释结果

id ,select_type,table ,type,rows, Extra 
1, SIMPLE ,members_ext , ALL ,8496471 ,Using where 
+1

表格有多少列?哪个存储引擎?你能分享表结构吗? @Syed Daniyal Asif – MontyPython

+0

约2000万 –

+0

20万对MySQL来说没有任何意义。请分享其他细节。 – MontyPython

回答

2

在admin_id,su_id上设置组合键,所以数据可以b仅通过索引获取。

+0

:我真的对它的原因感兴趣。 – Turo

+0

我的dv。因为复合钥匙在这种情况下没有优势 – Strawberry

+0

那么草莓怎么办? –

0

不要将数字存储在变量中,然后与数字进行比较。它不会有效地工作。

添加引号的位置:

SELECT su_id FROM members_ext WHERE admin_id = "5962789" 

然后,更快的查询,有INDEX(admin_id, su_id)

如果这个答案任何错误,请提供SHOW CREATE TABLE members_ext。有一些重要的缺失。

+0

如果我们只将索引应用于admin_id,为什么它不起作用?因为su_id在选择 –

+0

'INDEX(admin_id)'将有所帮助。 'INDEX(admin_id,su_id)'可能会更好。我需要看看'SHOW CREATE TABLE'来详细说明。 –