GORM设计原理 | 青训营

85 阅读2分钟

SQL是怎么生成的

SQL STATEMENT

  • SELECT Clause
  • FROM Clause
  • WHERE Clause
  • ORDER BY Clause
  • LIMIT Clause
  • FOR Clause

GROM STATEMENT

GROM API 方法添加Clauses至GROM Statement

GROM Finisher 方法执行GROM Statement

为什么这么设计?

  • 自定义Clause Builder
  • 方便扩展Clause
  • 自由选择Clauses

自定义Builder

扩展子句

选择子句

DB自定义CLAUSES

插件是怎么工作的

Create

为什么这么设计?

多租户

多数据库、读写分离

ConnPool是什么

读写分离

最开始的问题

  • 在性能方面,直接发送参数(不进行参数插值)可能更快。这是因为在不进行参数插值的情况下,数据库服务器可以更好地优化查询计划,以适应不同的参数值。
  • 当使用参数插值时,查询字符串会被修改为具体的参数值,这可能会导致查询缓存的命中率下降,因为每个具有不同参数值的查询都将被视为不同的查询。此外,数据库服务器无法基于参数值来优化查询计划,因为它只能看到已经被替换为具体值的查询。
  • 然而,性能差异可能会因数据库驱动程序和数据库服务器的实现而有所不同。一些驱动程序可能针对参数插值进行了优化,而一些数据库服务器可能对参数化查询有更好的优化支持。因此,在实际情况下,最好进行基准测试和性能分析,以确定哪种方式对你的特定应用程序和环境更快。
  • 此外,不要仅仅考虑性能,还要考虑安全性。参数化查询可以提供更好的防止 SQL 注入攻击的保护,因此在处理来自用户的输入或动态生成的查询时,使用参数化查询是推荐的做法。如果能够合理地处理参数化查询的性能,那么安全性应该是首要考虑因素。

Dialector是什么