2012-03-28 208 views
0

我是新來的MySQL,和我運行此查詢,MySQL冗餘索引替代?

SELECT item_id,amount FROM db.invoice_line WHERE item_id = 'xxx' 
OR item_id = 'yyy' 
... 
AND invoice_id IN 
    (SELECT id_invoices FROM db.invoices 
    WHERE customer = 'zzzz' 
    AND transaction_date > DATE_SUB(NOW(), INTERVAL 6 MONTH) 
    AND sales_rep = 'aaa') ORDER BY item_id; 

也就是說,從那裏的一個外鍵在另一個表中找到一個表中選擇一些列。

問題是我想在結果中還有客戶名稱。但是,在發票行表中找不到客戶名稱,它位於發票表中。

雖然我可以在表創建和插入時天真地創建重複索引,但我想知道是否有SQL方法從發票表中選擇適當的行並將其放在結果集中。

如果我只複製數據,性能會更好嗎?

感謝, 丹麥

+0

你的問題與添加額外的索引無關。它似乎與添加適當的JOIN以將列添加到您的SELECT有關。如果您添加了一些示例數據和您想要的輸出,這將有所幫助,這裏的人員可以幫助您構建正確的查詢。你可以編輯你的問題提供額外的信息?謝謝。 :) – 2012-03-28 00:28:00

回答

1

怎麼這樣呢?

SELECT 
    invoice_line.item_id, 
    invoice_line.amount, 
    invoices.customer_name 
FROM db.invoice_line 
INNER JOIN db.invoices 
    ON invoice_line.invoice_id = invoices.id_invoices 
WHERE invoices.customer = 'zzzz' 
AND invoices.transaction_date > DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) 
AND invoices.sales_rep = 'aaa' 
AND (invoice_line.item_id = 'xxx' OR invoice_line.item_id = 'yyy') 
ORDER BY invoice_line.item_id; 
1

在表格之間使用連接來實現您的結果。