我正在分析一个相当糟糕的旧数据库/代码库,试图通过将查询合并到联接中来减少服务器负载(包括电子邮件警报cron作业,该作业通常会调用超过一百万个单独的查询)。

SELECT * FROM
class_alerts_holding ah
INNER JOIN class_listings l ON l.id = ah.lid
INNER JOIN class_users u ON u.id = ah.uid
LEFT JOIN class_prodimages pi ON pi.pid = ah.lid

这会吐出120列...
aid | id | lid | uid | oid | catName | searchtext | alertfreq | listType | id | owner | title | section | shortDescription | description | featured | price | display | hitcount | dateadded | expiration | url | notified | searchcount | repliedcount | pBold | pHighlighted | notes | ...

为了帮助我分析如何构造新查询,如果我可以在结果中的列前面加上来自JOIN的表的前缀,那将是很棒的。
class_alerts_holding.aid | class_alerts_holding.id | class_listings.lid | ...

有没有办法做到这一点?

最佳答案

你可以

select ah.*, l.*, u.*, pi.* from ...

那么这些列将至少按表顺序返回。

为了更好地区分每两列列,您还可以添加“delimiter”列,如下所示:
select ah.*, ':', l.*, ':', u.*, ':', pi.* from ...

(已编辑,删除了不必要的显式别名,请参阅注释。)

10-04 13:50