这个问题已经在这里有了答案 :
9年前关闭。
可能重复:
WHERE子句中的列顺序重要吗?
这些是基本SQL
功能和关键字。
有什么提示或技巧可以加快您的速度SQL
吗?
例如; 我有很多关键字的查询。(AND, GROUP BY, ORDER BY, IN, BETWEEN, LIKE
…等)
哪个关键字应该在我的查询中排在最前面?我该如何决定?
例子;
Where NUMBER IN (156, 646)
AND DATE BETWEEN '01/01/2011' AND '01/02/2011'
或者
Where DATE BETWEEN '01/01/2011' AND '01/02/2011'
AND NUMBER IN (156, 646)
哪一个更快?取决于什么?
没有“技巧”。
鉴于数据库供应商之间的竞争是“更快”的,任何永远正确的“技巧”都将在数据库本身中实现。(这些技巧在数据库的“优化程序”部分中实现)。
只有要注意的事情,但通常不能简化为:
查看有关索引,索引类型,索引策略,群集,单列键,复合键,参照完整性,访问路径,联接,联接机制,html" target="_blank">存储引擎,优化器行为,数据类型,规范化,查询转换,反规范化,过程,缓冲区高速缓存,结果集高速缓存,应用程序高速缓存,建模,聚合,函数,视图,索引视图,集合处理,过程处理,并且列表继续存在。
所有这些都是为了攻击特定的问题区域而发明的。在该问题上的变化使“技巧”或多或少地适合。很多时候,这些技巧的效果为零,有时甚至变得可怕。为什么?因为当我们不了解某些事情为什么起作用时,我们基本上只是在向问题扔出一些功能,直到问题消失为止。
这里的关键点在于, 有一个原因使某事物使查询运行得更快 ,并且对事物的含义的 理解 对于
理解为什么一个不同的无关查询缓慢并对其进行处理的过程 至关重要 。这绝不是招数,也不是魔术。
我们(人类)很懒惰,当我们真正需要的是学习如何捕捉时,我们希望把那条鱼扔掉。
现在,您想抓什么具体的鱼?
编辑注释:
谓词在where子句中的放置没有区别,因为谓词的处理顺序由数据库确定。一些会影响该顺序的因素(例如,您的例子)是:
现在,如果您在NUMBER列中仅有的值是156、646,并且它们几乎均匀分布,则索引将无用。全面扫描将是更好的选择。
另一方面,如果这些是唯一的订单号(由唯一索引支持),则优化器将选择该索引并从那里驱动查询。同样,如果在2011年1月1日到1月2日之间具有DATE的行占行的比例很小,则将考虑以DATE开头的索引。
或者,如果您order by NUMBER, DATE
在方程式中包含另一个参数;分拣成本。现在,(NUMBER,DATE)上的索引似乎对优化器更具吸引力,因为即使它不是获取行的最有效方法,也可以跳过排序(这很昂贵)。
或者,如果您的查询包括对customer_id上的另一个表(例如customer)的联接,并且您还对进行了过滤customer.ssn
,则方程式也会再次更改,因为(由于您对外键和后备索引所做的出色工作)您现在将拥有到第一个表的非常有效的访问路径,而无需使用NUMBER或DATE中的索引。除非您只有一个客户,并且他的1000万个订单中的所有客户都…
这部分文档展示了一些 Jinja2 模板的提示和技巧。 Null-Master 退回 Jinja2 支持动态继承并且只要没有 extends 标签被访问过,就不分辨父模板和子模 板。而这会导致令人惊讶的行为:首个 extends 标签前的包括空白字符的所有东西 会被打印出来而不是被忽略,这也可以用作一个巧妙的方法。 通常,继承一个模板的子模板来添加基本的 HTML 骨架。而把 extends 标签
这部分文档展示了一些 Jinja2 模板的提示和技巧。 Null-Master 退回 Jinja2 支持动态继承并且只要没有 extends 标签被访问过,就不分辨父模板和子模 板。而这会导致令人惊讶的行为:首个 extends 标签前的包括空白字符的所有东西 会被打印出来而不是被忽略,这也可以用作一个巧妙的方法。 通常,继承一个模板的子模板来添加基本的 HTML 骨架。而把 extends 标签
提示 #1 - 发现快捷键 按 Ctrl + Shift + L 打开一个显示所有快捷键的小部件。 提示#2 - 内容辅助 在 Java 编辑器中,按Ctrl + Space查看建议的补全列表。在单击Ctrl + Space之前键入一个或多个字符将缩短列表。 提示 #3 - 参数提示 当光标位于方法参数中时,按Ctrl + Shift + Space查看参数提示列表。 提示 #4 - 代码完成中的
TIP #1 − DISCOVERING SHORTCUT KEYS 按Ctrl + Shift + L打开一个显示所有快捷键的小部件。 TIP #2 − CONTENT ASSIST 在Java编辑器中,按Ctrl + Space可查看建议的完成列表。 在单击Ctrl + Space之前键入一个或多个字符将缩短列表。 TIP #3 − PARAMETER HINT 当光标位于方法参数中时,按Ct
Navicat 提供一些实用的提示,在模型上工作更有效。 动作 描述 在图表画布找到对象 从模型删除对象 - 在图表画布中选择对象并按 SHIFT+DELETE。 打开表或视图编辑器 - 在浏览器的模型选项卡或图表画布中双击表或视图。 从 Navicat 主窗口 添加表或视图 - 从 Navicat 主窗口中拖曳表或视图到图表编辑器。 取得表或视图结构 (SQL 语句) - 在图表画布中选择并复制
Navicat Data Modeler 提供一些实用的提示,令创建模型更有效率。 在图表画布找到对象 在浏览器的图表选项卡中已选择的对象将会高亮显示在图表画布中。 在浏览器的图表选项卡中双击对象将跳至在图表画布中的对应对象。 从模型删除对象 在图表画布中选择对象并按 SHIFT-DELETE。 打开表、实体或视图编辑器 在浏览器的模型选项卡或图表画布中双击表、实体或视图。 取得表或视图结构(SQ