Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 生成序列是否比子查询快?_Sql - Fatal编程技术网

Sql 生成序列是否比子查询快?

Sql 生成序列是否比子查询快?,sql,Sql,我想优化我的查询,我目前正在子查询一个表,该表中加载了从0到9999的SMALLINT值序列 唯一可以确定的方法是测试它 几个月前,我用PostgreSQL做了类似的测试。问题是用generate_series替换日历表是否有意义 在我们的例子中,桌子更快。但如果您进行测试,您可能会发现生成_序列在特定行数下会变得更快。这就是我们发现的,但行数远远超过我们使用的任何行数。我的猜测是,在这一点上,生成序列所需的时间将小于从磁盘读取索引和行所需的时间 这是一个猜测,因为PostgreSQL的EXPL

我想优化我的查询,我目前正在子查询一个表,该表中加载了从0到9999的SMALLINT值序列


唯一可以确定的方法是测试它

几个月前,我用PostgreSQL做了类似的测试。问题是用generate_series替换日历表是否有意义

在我们的例子中,桌子更快。但如果您进行测试,您可能会发现生成_序列在特定行数下会变得更快。这就是我们发现的,但行数远远超过我们使用的任何行数。我的猜测是,在这一点上,生成序列所需的时间将小于从磁盘读取索引和行所需的时间


这是一个猜测,因为PostgreSQL的EXPLAIN Analysis没有提供有关磁盘I/O的详细信息。

对其进行基准测试并查看。哪一个数据库?这是我自己的自制数据库。也许你不明白数据库的问题。是SQL Server、Oracle、MySQL还是。。。?如果不了解为其编写查询的数据库,我们无法给出性能答案。是您不了解我的答案!。。这不是SQL Server、Oracle、MySQL或任何商用RDBMS,它是一种专有RDBMS,在市场上不可用,它是由内部开发的,但如果我要问的是GENERATE SERIES是否比子查询快,那么这又有什么关系呢?。。这两个数据库都支持它们!我们如何知道如何优化您的家用brew数据库?我们不知道您是如何设计它的,也不知道有什么调整可以提高它的性能。在一个RDBMS上运行良好的优化可能在另一个RDBMS上运行不太好。。我的情况是:我有一个事实表,它只有一个小整数32767列,包含从0到9999的序列,它的索引是对在Pick-4彩票游戏中抽取的2820个数字进行非IN子查询,所以我认为使用generate series比打开一个包含10000行的额外表要快?我不认为dbms需要打开一个表。猜测不能很好地扩展,尤其是在数据库管理系统中。这就是为什么它们都包含一些方法来查看查询优化器在做什么。您应该假设每个NOT IN查询都无法使用索引。谷歌搜索搜索表达式。一万行并不多;您的优化器可能会在该表上执行顺序扫描,即使它可以使用索引。我们的SET EXPLAIN on也是另一个我们无法对发生的事情进行太多解释的领域。尽管我们的查询优化器是基于成本的,explain并没有告诉我们诸如:磁盘I/O、CPU使用情况、选择使用表扫描与索引等。我通常会进行安全引导,以最小化其他进程,并使用WINDOWS任务管理器性能分析器或UNIX的sar系统活动报告来查看发生了什么。我过去的经验是,子查询必须扫描包含10000行的表,这些行使用NOT IN、等效于OR的值进行计算,这比使用NOT IN 1、2、3更昂贵。。。