精确统计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)视为一个不可知的黑匣子, 从使用角度缺失可以在很大程度上忽略它. 但这种"黑匣子"的描述具有误导性.
因为输入到查询规划器的信息都在我们的控制之中! 如果提供糟糕的输入, 查询规划器的输出--查询执行计划--也可能不佳.
进入阅读→