我有这个查询,它工作正常。
SELECT SUM(amount) FROM company.invoice_line WHERE item_id != shipping
AND item_id != ''
AND invoice_id IN
(SELECT id_invoices FROM company.invoices WHERE customer = 'XX'
AND sales_rep = 'XXX');
目的是总结代表从客户那里获得的所有销售额。客户和代表数据相关并存储在表invoice
中,invoice line
表与表相关invoice
。
对于我正在使用的数据大小,查询大约需要 0.015 秒
id_invoices
我在查询中用另一个 VARCHAR PK更改了查询,但没有标记为唯一或不是。
原因是之前,我有一个糟糕的设计,其中 aninvoice
将被插入到数据库中,然后会立即执行一个查询,要求将invoice
的自动递增 PK 用作外键。
为了有效地使用 BULK INSERT,我需要访问几乎所有数据的唯一标识符,而不依赖于自动递增的“普通”INT PK。我按照上面所说的那样完成了这一点,并添加了额外的列作为外键等。
我的插入速度现在很棒,但现在查询需要 7+ seconds。
重申一下,在此之前,我使用 vanilla auto-increment int 作为 PK。将外键切换为 VARCHAR 真的会破坏性能吗?
我的下一步似乎是恢复到 int id,但不是允许 MySQL 在插入时自动递增,而是手动创建这些 int 索引,以便我仍然可以使用批量插入。从查询的角度来看,这应该没关系......应该吗?
任何帮助,将不胜感激。
丹麦人