如何在 MYSQL 中创建索引?

Dea*_*Cat 1 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
Run Code Online (Sandbox Code Playgroud)

如果我给了表 transactiondetails 的索引,它会帮助这个查询吗?

创建的索引如下所述

CREATE INDEX IDX_transactiondetails_ID_Branch ON  transactiondetails 
(tx_voucher_id,tx_voucher_branch,accounthead_id) INCLUDE 
 (narration,CREDITDEBIT,amount)
Run Code Online (Sandbox Code Playgroud)

从上面的索引创建查询中,我们对某些列使用了INCLUDE关键字。现在我需要知道,如何在 MySQL 中创建上述索引创建查询

B.D*_*ani 5

尝试这个:

CREATE INDEX IDX_transactiondetails_ID_Branch ON  transactiondetails (tx_voucher_id, tx_voucher_branch, accounthead_id, narration, CREDITDEBIT, amount)
Run Code Online (Sandbox Code Playgroud)

MySQL 不支持“INCLUDE”,因此您必须创建多列索引。

在此处阅读更多信息:https : //dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html