首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助优化查询性能

需要帮助优化查询性能
EN

Stack Overflow用户
提问于 2011-12-07 05:12:43
回答 3查看 89关注 0票数 1

我有两个基本相同的问题:

旧的“事务”查询

代码语言:javascript
运行
复制
SELECT t.payment_method, t.amount, t.commission
FROM `transactions` t, `member_to_group` mtg, `member` m
WHERE mtg.`group_id`='37'
   AND t.`is_deleted`='No'
   AND t.`member_id`=mtg.`member_id`
   AND m.member_id=mtg.member_id
   AND m.`is_root`='No'
   AND t.`type` IN ('Payment','Credit')

新的“支付”查询

代码语言:javascript
运行
复制
SELECT p.method, p.amount, p.commission
FROM `payments` p, `member_to_group` mtg, `member` m
WHERE mtg.`group_id`='37'
   AND p.`status`='Active'
   AND p.`member_id`=mtg.`member_id`
   AND m.member_id=mtg.member_id
   AND m.`is_root`='No'

第一个来自“事务”表,第二个来自称为“支付”的新表。基本上,我们每笔交易都有一张巨大的表格(付款、信用、收费、费用等),但它失控了,因为每一种类型都有很多不被使用的领域--所以我们把基本类型分开了。

由于某些原因,尽管更新的表系统(都在同一个数据库中,请注意)组织得更好,而且查询之间也有相似之处,但旧的“事务”查询运行得更快。"transaction“表在0.004秒内返回结果,而”支付“查询则需要0.303秒。在web应用程序的某些领域(例如,多个组的列表),这将转化为40秒的页面加载时间(而不是低于3)。

是否有一个字段(或多字段)索引我可能要使用?我可以进一步优化新的查询吗?

这在MySQL 5.0.92上运行

编辑1: i目前有关于“事务”(transaction_id,member_id)和“支付”(id,member_id)的单字段索引。不幸的是,我只能访问这个特定服务器上的PHPMYADMIN,并且解释输出不易复制。也就是说,我可以看到" transaction“查询的不同之处在于它在mtg表上写着”使用where;使用索引“,而"payment”事务只是说“使用where”。

EN

Stack Overflow用户

发布于 2011-12-07 05:36:57

一般来说,您可以在JOIN字段、WHERE子句字段和ORDER BY字段上添加索引,以提高性能。注意,这将影响插入记录时的插入性能,但只要这并不重要,那么您就应该没事。

因此,要回答您的问题,可以在以下几个方面添加索引:

代码语言:javascript
运行
复制
mtg.group_id
p.status
p.member_id
mtg.member_id
m.member_id
m.isroot

编辑

假设ID字段已经是主键字段,因此它们将具有索引。

而且,您的is_rootstatus都是varchar字段,如果它们分别是tinyint(1)和status,则会更好。如果需要获取文本表示形式,可以创建一个单独的表来映射这些值。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8410716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档