当前位置: 首页 > 面试题库 >

SQLite表别名影响查询的性能

计承德
2023-03-14
问题内容

SQLite如何在内部处理别名?

创建表名别名是在内部创建同一表的副本还是仅引用同一表而不创建副本?

当我在代码中创建同一表的多个别名时,查询性能会受到严重影响!

在我的情况下,我有一个表,将其称为MainTable,即2列,即名称和值。我想在一行中选择多个值作为不同的列。例如

名称:a,b,c,d,e,f
值:p,q,r,s,t,u
,使得a对应于p,依此类推。

我想在一行中选择名称a,b,c和d的值=> p,q,r,s所以我写了一个查询

SELECT t1.name, t2.name, t3.name, t4.name  
FROM MainTable t1, MainTable t2, MainTable t3, MainTable t4
WHERE t1.name = 'a' and t2.name = 'b' and t3.name = 'c' and t4.name = 'd';

这样,当表的大小如Larry所正确指出的那样增加时,编写查询会破坏性能。

是否有任何有效的方法来检索此结果。我对SQL查询不好:(


问题答案:

假设您有表dbo.Customers有一百万行

SELECT * from dbo.Customers A

不会导致创建表的副本。

正如拉里(Larry)所指出的那样,查询本身对表进行四次笛卡尔乘积运算,正如您所观察到的那样,这会降低性能。

更新的票证指出,希望在同一行中具有来自不同查询的4个值。假设此语法对sqllite有效,这很简单

您可以看到以下四个查询在串行运行时产生期望的值,但在4行中。

SELECT t1.name
FROM MainTable t1
WHERE t1.name='a';

SELECT t2.name
FROM MainTable t2
WHERE t2.name='b';

SELECT t3.name
FROM MainTable t3
WHERE t3.name='c';

SELECT t4.name
FROM MainTable t4
WHERE t4.name='d';

技巧是像子查询那样简单地运行它们,因此有5个查询:1个驱动程序查询,4个子查询完成所有工作。 当返回一行时,此模式 有效。

SELECT
(
    SELECT t1.name
    FROM MainTable t1
    WHERE t1.name='a'
) AS t1_name
,
(
    SELECT t2.name
    FROM MainTable t2
    WHERE t2.name='b'
) AS t2_name
,
(
    SELECT t3.name
    FROM MainTable t3
    WHERE t3.name='c'
) AS t3_name
, 
(
    SELECT t4.name
    FROM MainTable t4
    WHERE t4.name='d'
) AS t4_name


 类似资料:
  • 问题内容: 我正在使用MySQL + Hibernate。 MySQL表名长度和列名长度会影响应用程序性能吗? 例如) 哪个更好 ? 问题答案: 不,它不会,在任何程度上都无法衡量。 花更多的精力使您的架构易于理解。从长远(短期)来看,您获得的收益将超过使用较短且难以理解的模式名称所获得的无法衡量的飞秒。

  • 问题内容: 我有一个用户表,其中有一个用户名和应用程序列。用户名可以重复,但是用户名+应用程序的组合是唯一的,但是我没有在表上设置唯一约束(出于性能考虑) 问题:两者之间是否有任何区别(在性能方面): 和 - 由于用户名+应用程序的组合是唯一的,因此两个查询将始终返回不超过一条记录,因此TOP 1不会影响结果。我一直以为添加TOP 1会真正加快速度,因为sql server会停止寻找匹配的内容,但

  • 假设一款手机游戏由一个MongoDB数据库支持,该数据库包含一个包含数百万文档的用户集合。 现在假设必须与用户关联的几十个属性-例如朋友文档的文档的

  • 我已经将完全相同的数据库表从MYSQL移到SQLite。以下查询在MYSQL中工作 但在SQLITE中,我得到一个“Error near'”。语法错误。使用cast到c的表别名,查询工作良好: Sqlite不喜欢查询的第一个版本的原因是什么?

  • 主要内容:语法,实例您可以暂时把表或列重命名为另一个名字,这被称为别名。使用表别名是指在一个特定的 SQLite 语句中重命名表。重命名是临时的改变,在数据库中实际的表的名称不会改变。 列别名用来为某个特定的 SQLite 语句重命名表中的列。 语法 表 别名的基本语法如下: 列 别名的基本语法如下: 实例 假设有下面两个表,(1)COMPANY 表如下所示: (2)另一个表是 DEPARTMENT,如下所示: 现在

  • 问题内容: 今天早些时候我在这个问题上愚弄了自己。问题是使用SQL Server,正确的答案涉及添加子句。我最初犯的错误是认为该语句中可以使用该语句中的别名,这在SQL Server中是不允许的。我犯此错误是因为我假设SQL Server与MySQL具有相同的规则,该规则允许在子句中使用别名。 这让我感到好奇,然后我在Stack Overflow和其他地方四处闲逛,找到了大量材料来解释为什么在两个