Skip to content

二级域名分发网站开发经历

更新: 2025/9/22 字数: 0 字 时长: 0 分钟

★ GitHub:970thunder/DomainDNS

求个star吧( ̄︶ ̄)↗

数据库优化

索引优化

核心在于使用最左前缀匹配,查询条件命中索引的从左到右前缀越长,利用度越高,顺序很重要,WHERE、JOIN、ORDER BY 中最常用、选择性最高的列放左边,尽量让一个复合索引同时覆盖过滤、连接、排序

设计示例: 用于“某用户指定类型流水按时间倒序分页”

sql
CREATE INDEX idx_points_user_type_time ON points_transactions(user_id, type, created_at);
  • user_id 选择性高,常作过滤维度

  • type 次要过滤

  • created_at 负责排序/范围,放最后

覆盖索引

主要是将查询需要的列全部在索引里,避免“回表”,一般用于读多写少、热点小表、列表页轻载字段

  • 示例:用户列表只显示 id、username、points,就可加轻量覆盖索引
sql
CREATE INDEX idx_users_list ON users(role, created_at, id, username, points);

查询优化

  • 只取必要列:杜绝无脑 SELECT *

  • 分页优化:大偏移量分页用“游标/锚点”

sql
-- 传统分页(偏移大时慢)
SELECT id, full_domain FROM user_domains ORDER BY id DESC LIMIT 20 OFFSET 100000;
-- 游标分页
SELECT id, full_domain FROM user_domains WHERE id < ? ORDER BY id DESC LIMIT 20;
  • 统计缓存:Dashboard 统计(总数/趋势)可定期预计算进 Redis,前端一次性拿

多级缓存

内存(Caffeine)→ Redis → DB

热点小数据(系统设置、枚举、配置)可用本地缓存提高极致读性能

本地缓存要有短 TTL 或基于版本号的主动失效

典型读取流程s 先查本地 Caffeine;miss 再查 Redis;再 miss 读 DB 并回填两级缓存

本站访客数 人次 本站总访问量