【发布时间】:2016-08-25 00:57:52
【问题描述】:
我有这张交易表:
idtransaction(pk)
时间
数量
价格单位
transaction_type(枚举买|卖)
item_iditem(fk)
character_idcharacter(fk)
我正在尝试检索属于给定用户的每个字符的每个买卖交易(用户帐户可以有多个字符),按日期排序。有一个表 'aggr' 列出了每个用户的每个字符,就像这样
'聚合' character_idcharacter(fk), user_iduser(fk)
所以很自然,我的查询将是(在检索所有销售的情况下)
SELECT idtransaction, item_iditem, quantity, time, price_unit
FROM transaction
WHERE transaction_type = 'Sell'
AND character_idcharacter
IN (
SELECT character_idcharacter
FROM aggr
WHERE user_iduser = (
SELECT iduser
FROM user
WHERE username = 'testuser' )
ORDER BY character_idcharacter
)
ORDER BY time ASC
当我总共有大约 200 万笔交易(大约 700 个结果需要 4-5 秒)时,这需要很长时间才能执行。
我已经尝试为字符外键和 transaction_type 字段创建索引,但似乎没有太大改善。关于如何使这更快的任何提示? (要么重写查询,要么在 MySQL 上摆弄别的东西)
【问题讨论】:
-
我不太喜欢IN子查询,也许这个问题stackoverflow.com/questions/1200295/sql-join-vs-in-performance会有所帮助。
标签: mysql performance select