精确统计clojure中的代码, 注释, 空行

cloc为代表的代码行数统计工具统计代码行数的时候, 比较傻, 只会把 ; 开头的当成注释.

以下的注释类型都不会被统计到, 结果不太准确.

  • 富注释(comment ...)
  • 文档字符串 docstring
  • 行间注释
进入阅读→

SQLite日期和时间处理

SQLite 作为一款轻量级数据库, 以其简洁和高效著称. 然而, 对于许多开发者来说, 都会遇到同一个问题-- SQLite没有专门的日期和时间数据类型.

SQLite 如何处理日期和时间?

既然 SQLite 没有原生的日期和时间数据类型, 那么该如何存储和操作日期时间值呢? SQLite 提供了三种存储日期和时间值的方法:

进入阅读→

SQLite数据库的一些高级特性

本文介绍了SQL的一些高级特性(case函数, json操作, 窗口函数,coalesce函数等).

兼容mysql8.0以上版本以及postgresql7.x以上版本. 用sqlite介绍是因为sqlite数据库方便.

进入阅读→

SQLite CTE介绍

Common Table Expressions, 简称 CTE, 是 SQL 中一个强大的工具, 它能让查询更清晰易懂, 还能处理一些看似棘手的问题, 比如递归查询. 让我们一起揭开 CTE 的神秘面纱吧!

CTE 的基本结构

CTE 的语法结构非常清晰, 以 WITH 关键字开始, 后跟 CTE 的名称(可以自定义名称), 然后在括号内定义一个 SQL 查询语句, 最后在主查询中引用这个 CTE. 就像这样:

进入阅读→

SQLite深入理解索引

想提升你的数据库技能, 索引绝对是你应该优先关注的领域. 应该了解各种索引类型, 它们的工作原理以及何时应该使用它们等等.

在SQLite 数据库中的 orders 表中包含了 2000 万行数据. 在讨论索引之前, 先快速看一下在没有索引的情况下, 查询是如何执行的. 目前orders 表除了主键外, 没有任何其他索引.

先从一个简单的查询开始:

进入阅读→

SQLite 扩展

SQLite 以其轻量, 便捷而著称, 虽然它本身不像其他大型数据库那样拥有丰富的功能, 但SQLite 强大的可扩展性可按需要增加的功能.

例如, SQLite 本身没有 UUID 函数, 但如果需要, 完全可以通过多种方式来实现. 可以自己编写代码, 也可以借助开源库, 添加 UUID 功能.

如果熟悉 SQL, 可能会想到使用 SQL 的数据定义语言 (DDL) 来创建函数, 就像这样:

进入阅读→

修复 SQLite 中的慢查询

当应用开始变慢时, 罪魁祸首往往就是数据库查询. 在 SQL Lite 中, 找到性能不佳的查询通常可以通过设置良好的日志记录来完成. 但是, 当已经识别出一个慢查询后, 如何找到并修复导致速度缓慢的根本原因呢?

手动调查慢查询对于经验丰富的开发者来说通常效果很好, 因为他们往往对查找方向有很好的直觉. 然而, 我们不必完全依赖手动排查. 有一些优秀的性能分析工具可供我们使用, 这些工具对于 SQL 新手以及处理复杂查询的经验丰富的开发者来说都非常有帮助.

那么, SQLite 提供了哪些性能分析工具呢? 其中最有用的工具之一就是 EXPLAIN QUERY PLAN 命令.

进入阅读→

SQLite数据库瘦身

SQLite数据库会随着数据量的增长而自动增大, 这似乎理所当然. 但是, 当删除数据时, SQLite 数据库文件的大小真的会缩小吗? 答案可能有些意外.

用一个例子来说明 SQLite 在删除数据时的实际行为.

假设有一个 SQLite 数据库文件, 大小接近 600MB. 使用命令行工具打开这个数据库, 并执行以下 SQL 命令, 删除 contacts 表中 state 列值为 'Texas' 的所有记录.

进入阅读→

SQLite Journal Mode介绍

SQLite 以其轻量级, 易用性著称, 无需专业的数据库管理技能即可上手. 只需将SQLite库添加到项目, 便能立即开始执行SQL语句.

这种极简主义的上手体验, 可能会让人误以会以为为 SQLite 是完全无需配置的.

虽然 SQLite 的确无需繁琐的配置, 但仍有一些关键配置选项值得关注.

进入阅读→

SQLite的统计信息与查询优化

SQL 是一种声明式语言, 优雅地表达了想要什么数据, 而不是如何获取它. 这一过程由由数据库引擎实现.

人们很容易将查询规划器(execution planer)视为一个不可知的黑匣子, 从使用角度缺失可以在很大程度上忽略它. 但这种"黑匣子"的描述具有误导性.

因为输入到查询规划器的信息都在我们的控制之中! 如果提供糟糕的输入, 查询规划器的输出--查询执行计划--也可能不佳.

进入阅读→