mysql怎么运行快_mysql – 如何让这个查询运行得更快?

索引

>您至少需要 – 在JOIN条件中使用的每个字段的索引.

> WHERE或GROUP BY或ORDER BY子句中出现的字段的索引大部分时间都是有用的.

>在表中,在JOIns(或WHERE或GROUP BY或ORDER BY)中使用两个或多个字段时,这些(两个或更多)字段的复合(组合)索引可能比单独的索引更好.例如,在SiteNumbers表中,可能的索引是化合物(number_accountid,number_active)或(number_active,number_accountid).

>布尔值(ON / OFF,活动/非活动)字段中的条件有时会减慢查询速度(因为索引不是选择性的,因此不是很有帮助).在这种情况下,重组(父规范化)表是一种选择,但可能您可以避免增加的复杂性.

除了通常的建议(检查EXPLAIN计划,在需要的地方添加索引,测试查询的变体),

我注意到在你的查询中有一个部分笛卡尔积.表Accounts与三个表FTPDetails,SiteNumbers和PPC有一对多的关系.这样做的结果是,如果您有例如1000个帐户,并且每个帐户与10个FTPDetails,20个SiteNumbers和3个PPC相关,则查询将为每个帐户返回600行(10x20x3的乘积).总共600K行,其中许多数据是重复的.

您可以将查询拆分为三加一基础数据(帐户和其余表).这样,只会传输34K行数据(长度较小):

Accounts JOIN Clients JOIN Users

(with all fields needed from these tables)

1K rows

Accounts JOIN FTPDetails

(with Accounts.account_id and all fields from FTPDetails)

10K rows

Accounts JOIN SiteNumbers

(with Accounts.account_id and all fields from SiteNumbers)

20K rows

Accounts JOIN PPC

(with Accounts.account_id and all fields from PPC)

3K rows

然后使用客户端4个查询中的数据显示组合信息.

我会添加以下索引:

Table Accounts

index on (account_designer)

index on (account_client)

index on (account_active, account_id)

index on (account_update)

Table FTPDetails

index on (ftp_active, ftp_accountid)

Table SiteNumbers

index on (number_active, number_accountid)

Table PPC

index on (ppc_active, ppc_accountid)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值