gpt4 book ai didi

mysql - 如何加速 sql 查询?索引?

转载 作者:IT王子 更新时间:2023-10-29 00:38:03 24 4
gpt4 key购买 nike

我有以下数据库结构:

create table Accounting
(
Channel,
Account
)

create table ChannelMapper
(
AccountingChannel,
ShipmentsMarketPlace,
ShipmentsChannel
)

create table AccountMapper
(
AccountingAccount,
ShipmentsComponent
)

create table Shipments
(
MarketPlace,
Component,
ProductGroup,
ShipmentChannel,
Amount
)

我在这些表上运行了以下查询,我正在尝试优化查询以尽可能快地运行:

 select Accounting.Channel, Accounting.Account, Shipments.MarketPlace
from Accounting join ChannelMapper on Accounting.Channel = ChannelMapper.AccountingChannel

join AccountMapper on Accounting.Accounting = ChannelMapper.AccountingAccount
join Shipments on
(
ChannelMapper.ShipmentsMarketPlace = Shipments.MarketPlace
and ChannelMapper.AccountingChannel = Shipments.ShipmentChannel
and AccountMapper.ShipmentsComponent = Shipments.Component
)
join (select Component, sum(amount) from Shipment group by component) as Totals
on Shipment.Component = Totals.Component

如何让这个查询运行得尽可能快?我应该使用索引吗?如果是这样,我应该索引哪些表的哪些列?

这是我的查询计划的图片:

enter image description here

谢谢,

最佳答案

索引对于任何数据库都是必不可少的。

用“外行”的话来说,索引是……嗯,正是如此。您可以将索引视为第二个隐藏的表,其中存储了两件事:已排序的数据和指向其在表中位置的指针。

创建索引的一些经验法则:

  1. 为连接中使用(或将使用)的每个字段创建索引。
  2. 在您希望执行频繁 where 条件的每个字段上创建索引。
  3. 避免为所有内容创建索引。为每个表的相关字段创建索引,并使用关系检索所需的数据。
  4. 避免在 double 字段上创建索引,除非绝对必要。
  5. 避免在 varchar 字段上创建索引,除非绝对必要。

我建议您阅读以下内容:http://dev.mysql.com/doc/refman/5.5/en/using-explain.html

关于mysql - 如何加速 sql 查询?索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com