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

基于列顺序的查询速度

赵元白
2023-03-14
问题内容

数据库中列类型的顺序是否对查询时间有影响?

例如,具有混合顺序(INT,TEXT,VARCHAR,INT,TEXT)的表的查询是否比具有连续类型(INT,INT,VARCHAR,TEXT,TEXT)的表的查询慢?


问题答案:

答案是肯定的,这确实很重要,并且可能很重要,但 通常 并不重要。

所有I / O都在页面级别完成(根据您的操作系统,通常为2K或4K)。行的列数据彼此相邻存储,除非页面已满,否则在另一页(通常是下一页)上写入数据。

所选列之间(基于表定义)的列所需的磁盘数据空间越大,则所选列的数据(有时)在不同页面上的机会就越大。在其他页面上可能会导致额外的I /
O操作(如果在另一页面上没有选择其他行)。在最坏的情况下,您选择的每一列可能在不同的页面上。

这是一个例子:

create table bad_layout (
num1 int,
large1 varchar(4000),
num2 int,
large2 varchar(4000),
num3 int,
large3 varchar(4000)
);

create table better_layout (
num1 int,
num2 int,
num3 int,
large1 varchar(4000),
large2 varchar(4000),
large3 varchar(4000)
);

比较:从bad_layout中选择num1,num2,num3;从Better_layout中选择num1,num2,num3;

因为对于bad_layout,每个num列基本上都将位于不同的页面上,所以每一行将需要3个i /
o操作。相反,对于Better_layout,通常将num列放在同一页上。

bad_layout查询的执行时间可能大约要长3倍。

良好的表布局可以对查询性能产生很大的影响。您应该尝试使通常选择在一起的列在表布局中尽可能地彼此靠近。



 类似资料:
  • 问题内容: 当我将以下Firebase数据库数据加载到tableView中时,数据按日期升序排序。如何通过降序排序(在顶部显示最新帖子)? 在Xcode中查询: JSON导出: 谢谢!! 编辑:下面的代码是整个解决方案,感谢Bawpotter 更新的查询: tableView cellForRowAtIndexPath Post.swift: 问题答案: 当Firebase将数据加载到tableV

  • 问题内容: 从MySQL表中选择列时,与列在表中的顺序相比,选择列的顺序是否会影响性能(不考虑可能覆盖列的索引)? 例如,您有一个表,其中包含uid,name,bday行,并具有以下查询。 MySQL是否会以不同的方式看到以下查询,从而导致性能下降? 问题答案: 实际上,顺序并不重要,因此您可以随意随意订购。 编辑:我想更多的背景是有帮助的:据我所知,优化任何查询的过程发生在确切确定要提取行数据的

  • 问题内容: Microsoft(和许多开发人员)声称SqlDataReader.GetOrdinal方法与使用命名查找即使用DataReader相比,提高了从DataReader检索值的性能。reader [“ ColumnName”]。问题是,如果处理小的分页记录集,那么 真正的 性能差异是什么?在整个代码中查找和引用序数索引是否值得付出额外的开销? 问题答案: Microsoft建议不要在循环

  • 问题内容: 我有一个查询,用于查找按位置排序的结果。结果还必须考虑增值税,因此这也在查询中。不幸的是,该查询在未缓存时可能需要4秒钟以上的时间才能运行。谁能发现任何明显的问题或建议我做些什么来改善它? 只是为了澄清查询中正在发生的事情: 计算的距离是使用经/纬度的欧几里得距离 当包含增值税时,incvat字段用于显示价格 WHEN / THEN语句用于将价格0置于最底端 查询: 问题答案: 您可以

  • 问题内容: 我需要检查(从同一张表)基于日期时间的两个事件之间是否存在关联。 一组数据将包含某些事件的结束日期时间,另一组数据将包含其他事件的开始日期时间。 如果第一个事件在第二个事件之前完成,那么我想将它们链接起来。 到目前为止,我有: 然后我加入他们: 然后,可以基于我的validation_check字段运行带有SELECT嵌套的UPDATE查询吗? 问题答案: 您实际上可以通过以下两种方式

  • 在DynamoDB中,我有一个表,其中每条记录都有两个日期属性,