mysql subquery alias_Mysql创建SQL子查询ALIAS

本文探讨了在SQL中使用视图简化复杂查询的方法,并讨论了视图对性能的影响。介绍了如何创建视图以及在不同场景下使用视图的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本上,我有这样的多个查询:

SELECT a, b, c FROM (LONG QUERY) X WHERE ...

问题是,我经常使用这个LONG QUERY.我希望给这个子查询一个别名,主要是:

>缩短&简化查询(还减少错误和代码重复)

>可能优化性能. (我相信这是默认通过mysql查询缓存完成的)

直到现在,我一直这样做存储:

variable = LONG QUERY;

Query("SELECT a, b, c FROM ("+variable+") X WHERE ...");

哪个不错.我正在寻找一种方法在内部使用mysql.

是否有可能创建一个简单的只读视图,这将产生无开销,所以我可以在任何地方做?我相信这是更多的适当者和这样做的可读方式.

SELECT a, b, c FROM myTable WHERE ...

解决方法:

通常这些被称为视图.例如:

CREATE VIEW vMyLongQuery

AS

SELECT a, b, c FROM (LONG QUERY) X WHERE ...

然后可以像这样引用:

SELECT a, b, c FROM vMyLongQuery

就性能而言,最佳案例性能将与您现在正在做的完全相同,最坏的情况是它会扼杀您的应用程序.这取决于你对视图的处理方式以及MySQL如何处理它们.

MySQL实现了两种方式合并和temptable的视图.合并选项几乎就是您现在正在执行的操作,您的视图将作为子查询合并到您的查询中.使用temptable它实际上将所有数据假脱机到temptable然后选择/ join到那个temptable.当数据连接到temptable时,您也会失去索引优势.

作为抬头,合并查询计划不支持视图中的以下任何内容.

>聚合函数(SUM(),MIN(),MAX(),COUNT()等)

> DISTINCT

> GROUP BY

> HAVING

>限制

> UNION或UNION ALL

>选择列表中的子查询

>引用没有基础表的文字

因此,如果您的子查询使用这些,则可能会损害性能.

另外,仔细注意OMG小马的建议,观点与基类不同.视图在数据库中占有一席之地但很容易被滥用.当工程师从OO背景进入数据库时​​,视图似乎是一种促进代码继承和可重用性的便捷方式.通常人们最终会发现自己处于嵌套视图的位置,这些视图连接到嵌套视图的嵌套视图. SQL通过基本上获取每个单独视图的定义并将其扩展为将使DBA哭泣的查询的野兽来处理嵌套视图.

此外,您在示例中遵循了优秀的做法,我鼓励您继续这样做.您单独指定了所有列,从未使用SELECT *指定视图的结果.它最终会破坏你的一天.

标签:sql,caching,mysql,alias,view

来源: https://codeday.me/bug/20190902/1793372.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值