有经验的SQL开发人员可以使用哪些方法/技术来确定特定的SQL查询是否会随着负载的增加,关联表中的行的增加等而很好地扩展。
我遵循的一些规则最重要。
不要 在你的查询,如使用每排功能if
,case
,coalesce
等等。通过将数据放入您需要的格式的数据库中来解决它们,即使这涉及重复的数据。
例如,如果您需要快速查找姓氏,则以输入的形式 和 小写形式存储它们,并索引小写形式。这样您就不必担心诸如此类的事情select * from tbl where lowercase(surname) = 'smith';
是的,我知道这会破坏3NF,但是您仍然可以通过明智地使用触发器或预先计算的列来保证数据完整性。例如,表上的插入/更新触发器可以强制将lower_surname
列设置为的小写版本surname
。
这会将转换成本转移到insert/update
(很少发生),而从select
(发生更多)。您基本上会摊销转换成本。
确保where
子句中使用的每个列都已建立索引。不一定要单独使用,但至少要作为组合键的主要部分。
始终从3NF开始,只有在性能问题( 生产中 )时才还原。3NF通常是最容易处理的,只有在绝对必要时才应执行还原操作。
生产中的配置文件(或其他位置,只要您具有生产数据和模式)。除非表中的数据永不更改(非常少见),否则数据库调整不是“一劳永逸”的操作。您应该定期进行监视,并可能进行调整,以免发生更改数据会降低性能的可能性。
除非绝对必要,否则请勿对您的数据库进行裸查询。尝试控制可以运行哪些查询。如果有一些经理可以加入并开始工作,那么您作为DBA的工作将变得更加困难:
select * from very_big_table order by column_without_index;
在您的数据库上。
如果经理希望能够运行即席查询,请为他们提供一个克隆的DBMS(或副本),以使您的实际用户(需要性能的用户)不受影响。
不要使用union
何时union all
就足够了。如果知道联合的两个选择之间没有重复项,那就没有必要让DBMS尝试删除它们。
同样,select distinct
如果要检索所有主键列(或唯一约束中的所有列),请不要在表上使用。有 没有
在这种情况下重复的可能性,所以,再一次,你问的DBMS做不必要的工作。
示例:我们有一个客户select distinct *
在其一张桌子上使用了视图。查询视图花费了50秒钟。当我们用开始视图替换它时select *
,时间降到了亚秒级。不用说,我从中得到了一瓶红酒:-)
尽量避免select *
。换句话说,仅获取所需的列。当您在本地PC上使用MySQL时,这几乎没有什么区别,但是,当加利福尼亚州有一个应用程序查询内蒙古的数据库时,您希望最大程度地减少通过网络发送的流量。
本文向大家介绍C#判断ip地址是否可以ping的通,包括了C#判断ip地址是否可以ping的通的使用技巧和注意事项,需要的朋友参考一下
本文向大家介绍怎么判断对象是否可以被回收?相关面试题,主要包含被问及怎么判断对象是否可以被回收?时的应答技巧和注意事项,需要的朋友参考一下 一般有两种方法来判断: 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。
1、引用计数算法 (1)判断对象的引用数量 通过判断对象的引用数量来决定对象是否可以被回收; 每个对象实例都有一个引用计数器,被引用+1,完成引用-1; 任何引用计数为0的对象实例可以被当做垃圾回收; (2)优缺点 优点:执行效率高,程序受影响较小; 缺点:无法检测出循环引用的情况,导致内存泄漏; 2、可达性分析算法 通过判断对象的引用链是否可达来决定对象是否可以被回收。 如果程序无法再引用该对象
本文向大家介绍判断日期是否能跨月查询的js代码,包括了判断日期是否能跨月查询的js代码的使用技巧和注意事项,需要的朋友参考一下
本文向大家介绍纯javascript判断查询日期是否为有效日期,包括了纯javascript判断查询日期是否为有效日期的使用技巧和注意事项,需要的朋友参考一下 以下内容主要通过js代码给大家介绍,代码比较简单,包含注释,有好的建议欢迎提出。 如下图,当查询条件含有日期时,如“2012-3-4”,查询前校验输入的日期字符串是否为有效的日期 js判断年月日是否一个有效日期 以上代码就是对日期的有效性校
本文向大家介绍Django ORM判断查询结果是否为空,判断django中的orm为空实例,包括了Django ORM判断查询结果是否为空,判断django中的orm为空实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充知识:关于在Sqlite3中如何判断数据表返回的结果集是否为空的问题解决 1、如果查询语句中只有聚合函数,例如max,min,avg等。