- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在研究查询优化,并且正在尝试计算其中包含依赖查询的查询的成本。
查询是:
select
U.userName, email, yearOfBirth, countryName
from
tblUser U
inner join
tblCountry C on U.countryNo = C.countryNo
left join
tblList L on U.userName = L.userName
where
noOfPoints = 1000
and yearOfBirth = 1975
and listNo is null
and not exists (select count(*)
from tblseek S
where S.userName = U.userName
having count(serialNo) > 3)
现在一些数据:
首先是表及其连接:
tbl国家:Nr=19,Fr=67,Br=1
tbl用户:Nr=1,881,923,Fr=11,Br=171,084
列表:Nr=4,667,166,Fr=62,Br=75,277
tblSeek:Nr=8,530,865,Fr=13,Br=656,221
用户寻宝次数分布为:
0 次查找:10% 的用户
1 次查找:11% 的用户
2 次查找:19% 的用户
3 及以上:60% 的用户
就每个用户的列表数量而言,用户之间的分布是:
0 个列表:30% 的用户
1-3 列出:34% 的用户
4-6 列表:36% 的用户
众所周知,整个系统的最大积分为5200,并且在用户之间均匀分配。
众所周知,最年轻的用户为 16 岁,最大的为 57 岁,并且年龄在所有用户中均匀分布。
block 大小为:2048 位
分配给查询的内存量为:100 block
每个表均按其主键排序,如果有多个字段,则按其在表中出现的顺序排序。
现在,我要计算什么:
我试图在外部查询中执行联接之前确定运行依赖查询的成本,因此将 tblUser 加载到内存并执行内部查询,然后完成其他联接。
我的问题:好吧,我发现为了做到这一点,我需要以 171,084 个 block 的代价将 tblUser 加载到内存中,并以 656,221 个 block 的代价加载 tblSeek,我无法确定的是如何以及在哪里执行“Where”子句的条件,因为您可能会注意到该子句中的大多数条件都与 tblUser 的属性有关(除了列表条件)。
我设法估算出(我不确定这样做是否正确,如果我错了请纠正我)在统一转移知识下有多少记录会回答“点= 1000”(其361)记录)并对“yearOfBirth = 1975”(45,900 条记录)也执行了相同的操作。我通过将 tblUser 的 Nr 分别除以均匀分流已知的数字区域来做到这一点。
我无法想出一种方法将它们组合成一个数字,表示所有条件混合在一起(包括相关查询)将返回多少条记录。
如果您能指导我一点,我将非常感激。
谢谢
汤姆
最佳答案
使用EXPLAIN FORMAT=JSON SELECT ...
进一步了解查询的执行方式。
使用它来获取工作的一些“行数”:
FLUSH STATUS;
SELECT ...
SHOW SESSIONS STATUS LIKE 'Handler%';
索引。 (我无法告诉你已经拥有什么,因为你没有提供 SHOW CREATE TABLE
。)
U: INDEX(yearOfBirth, noOfPoints)
EXISTS(...)
通常表述为简单的 EXISTS ( SELECT * FROM ... )
;不需要COUNT(*)
。我不明白EXISTS
的目的。也许这会检查 tblseek
有多少行:
AND ( SELECT COUNT(*) FROM tblseek WHERE userName = U.userName ) <= 3
也许你想要INDEX(userName, serialNo)
, 以该顺序。这是一个“覆盖”索引,因此子查询可以完全在索引中执行。 EXPLAIN
将通过“使用索引”来指示。
该子查询总共将接触 tblseek(或其索引)中的每一行一次。实际上,每次扫描都会超调一次。所以触摸的行数很可能是N+M,其中N是tblseek
中的行数M 是 userName
的不同值的数量在tblseek
。如果没有该索引,行数将会高很多。
关于mysql - 相关查询的 EC(内部)计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087802/
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
这是我的测试用例。 http://tobeythorn.com/isi/dummy2.svg http://tobeythorn.com/isi/isitest.html 如果我自己打开 svg,内部
我正在尝试做类似的事情: SELECT SUM( CASE WHEN ( AND EXISTS(SELECT 1
我想问如何在外部 ng-repeat 内部正确使用内部 ng-repeat: 这意味着你想使用这样的东西: {{milestone.id}} {{
我希望在 wordpress 的仪表板内编辑 css 样式并且如果可能的话不必编辑 php 文件。 我知道至少可以编辑一些属性,所以我希望我可以直接在仪表板中编辑所有属性。 更具体地说如何更改自定义类
我在安装在 windows10 上的 vmware 中的 Ubuntu 上安装了伪分布式独立 hadoop 版本。 我从网上下载了一个文件,复制到ubuntu本地目录/lab/data 我在 ubun
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
我有一个如下所示的 WHERE 语句: WHERE ((@Value1 IS NULL AND [value1_id] IS NULL) OR [value1_id] = ISNULL(@Va
在我的一些测试帮助程序代码中,我有一个名为 FakeDbSet(Of T) 的 IDbSet(Of T) 实现,它模拟了许多 EF 行为,但没有实际的数据库。我将类声明为 Friend ,因为我想强制
我正在寻找 Cassandra/CQL 的常见 SQL 习语 INSERT INTO ... SELECT ... FROM ... 的表亲。并且一直无法找到任何以编程方式或在 CQL 中执行此类操作
如何防止内部 while 循环无限运行?问题是,如果没有外部 while 循环,内部循环将毫无问题地运行。我知道它必须对外循环执行某些操作,但我无法弄清楚是什么导致了问题。 import java.u
我正在努力学习更多有关 C++ 的知识,但在国际象棋程序中遇到了一些代码,需要帮助才能理解。我有一个 union ,例如: union b_union { Bitboard b; st
这是我项目网页中的代码片段。这里我想显示用户选择的类别,然后想显示属于该类别的主题。在那里,用户可以拥有多个类别,这没有问题。我可以在第一个 while 循环中打印所有这些类别。问题是当我尝试打印主题
我想知道如何在 swing 中显示内部框架。这意味着,当需要 JFrame 时,通常我所做的是, new MyJFrame().setVisible(true); 假设之前的表单也应该显示。当显示这个
我最近发现了一些有趣的行为,这让我想知道对象如何知道存在哪些全局变量。例如,假设我有一个文件“test.py”: globalVar = 1 toDelete = 2 class Test(objec
我知道它已经在这里得到回答: google maps drag and drop objects into google maps from outside the Map ,但这并不完全是我所需要的
我目前正在学习Javascript DOM和innerHTML,发现在理解innerHTML方面存在一些问题。 这是我的代码:http://jsfiddle.net/hphchan/bfjx1w70/
我构建了一个布局如下的库: lib/ private_class_impl.cc private_class_decl.h public_class_impl.cc include/
我有一个使用 bootstrap 3 的组合 wordpress 网站。它基本上是一个图像网格。当屏幕展开时,它会从三列变为四列。移动时它是一列。 我想出了如何调整图像的顶部和底部边距,但我希望图像的
我正在试用 MSP-EXP430G2 的教程程序,使用 Code Composer Studio 使 LED 闪烁。最初,它有一个闪烁的无限循环: for(;;) // This emp
我是一名优秀的程序员,十分优秀!