我有一个像这样的SQL查询:
Select ah.CODE,
case when ( (t.narration)='' OR (t.narration) is NULL) then concat(isnull(v.nameandaddress,''),' ', (v.remarks)) else (t.narration) end as narration,
v.VOUCHERNO,
case when t.CREDITDEBIT = 1 then t.amount else 0 end as dr_amount,
case when t.CREDITDEBIT = 0 then t.amount else 0 end as cr_amount,
v.issueDate,
ag.NAME ,
ah.name,
(v.remarks)
from voucher v
inner join transactiondetails t on t.tx_voucher_id = v.voucherId and
t.tx_voucher_branch = v.sourceUnit
inner join accounthead ah on t.accounthead_id = ah.ID
inner join accountgroup ag on ag.ID=ah.accountgroup_id
where v.sourceunit=279
and v.issueDate between '2017-04-01 00:00:00' and '2018-01-18 00:00:00'
and v.ISCANCELLED=0
and ah.code in ('1412')
order by ah.name, v.issuedate, v.voucherid
如果我给表transactionindtails提供了一个索引,它会帮助这个查询吗?
创建的索引如下所述
CREATE INDEX IDX_transactiondetails_ID_Branch ON transactiondetails
(tx_voucher_id,tx_voucher_branch,accounthead_id) INCLUDE
(narration,CREDITDEBIT,amount)
从上面的索引创建查询中,我们对某些列使用了 INCLUDE 关键字。现在我需要知道,如何在MySQL中创建上述索引创建查询?
答案 0 :(得分:4)
试试这个:
CREATE INDEX IDX_transactiondetails_ID_Branch ON transactiondetails (tx_voucher_id, tx_voucher_branch, accounthead_id, narration, CREDITDEBIT, amount)
MySQL不支持" INCLUDE",因此您必须创建多列索引。
在这里阅读更多内容: https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html