改善选择语句的性能

时间:2018-12-13 08:52:44

标签: mysql

我有一个约有500,000行的表,带有一个复合主键索引。我正在尝试如下的简单选择语句

select * from transactions where account_id='1' and transaction_id='003a4955acdbcf72b5909f122f84d';

解释说明给了我

id | select_type | table        | partitions | type  | possible_keys | key     | key_len | ref         | rows | filtered | Extra
-------------------------------------------------------------------------------------------------------------------------------------
1 | SIMPLE       | transactions | NULL       | const | PRIMARY       | PRIMARY | 94      | const,const | 1    | 100.00    | NULL

我的主要索引在account_id和transaction_id上。 我的引擎是InnoDB。

运行查询时,大约需要156毫秒。

给出的解释表明只需要检查一行,我不确定如何进一步优化它。我可以做些什么改变来显着改善呢?

1 个答案:

答案 0 :(得分:2)

鉴于提供的信息,我将稍作推测:您的主键由一个整数字段account_id和一个称为varchar的{​​{1}}组成。

由于它们都是在将transaction_id定义为PRIMARY时创建的PRIMARY KEY(account_id, transaction_id)索引的组成部分,因此原样是您所能拥有的最好的。

我认为这里的瓶颈是transaction_id:作为字符串,需要更多的精力来进行索引和搜索。将其类型更改为其他更容易搜索的类型(即数字)可能会有所帮助。

我看到的唯一其他改进是通过删除PRIMARY KEY字段来简化account_id本身(对我来说这似乎没有用,因为transaction_id感觉像是独一无二的,但是取决于您的设计)或通过将整个密钥替换为整数AUTO INCREMENT值(不推荐)。