如何在MYSQL中创建索引?

时间:2018-01-25 06:44:44

标签: mysql sql mysql-workbench

我有一个像这样的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中创建上述索引创建查询

1 个答案:

答案 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