答:如果用户按顺序翻页,保存上一页最后一行的排序键,再用范围条件找下一批。索引匹配时,可以减少扫描并跳过大量偏移行的成本。
答:INNER JOIN 只留下匹配组合。LEFT JOIN 保留左侧未匹配行并给右侧补 NULL,RIGHT JOIN 则保留右侧。一个键匹配多行时,输出行数也会随之增加。
答:NOT NULL 管必填,CHECK 管允许范围,PRIMARY KEY 和 UNIQUE 管标识与重复,FOREIGN KEY 管引用。约束是否支持和怎样检查,还要看版本与引擎。
答:COUNT() 数匹配行,COUNT(1) 数非 NULL 常量所以也数行,COUNT(列) 只数该列非 NULL 的行。MySQL 的 InnoDB 对 COUNT() 和 COUNT(1) 不必按旧口诀分性能。
答:NULL 表示缺失或未知,空字符串是长度为零的已知文本,零是数值。筛选缺失值用 IS NULL,普通等号与 NULL 比较得到未知。
答:先收集常见查询的筛选、连接、排序、结果范围与更新频率,再看数据分布和现有索引。按典型负载选择列和顺序,比给每个字段单独建索引更可靠。
答:旧 MySQL 资料中的 HEAP 通常指 MEMORY 引擎,数据主要在内存中,服务重启后行数据丢失。其他数据库里的堆表常指一种行存放组织,需要先确认语境。
答:两者都是近似数。FLOAT 通常占 4 字节,DOUBLE 通常占 8 字节,DOUBLE 能表示更多有效数字和更宽范围。需要精确十进制计算时应评估 DECIMAL。
答:MySQL 的 CHAR_LENGTH 数字符,LENGTH 数字节。utf8mb4 中文常用字通常占三个字节,部分字符占四个,英文 ASCII 则占一个。
答:ENUM 给列定义一组可选字符串,适合很小且稳定的状态集合。内部与枚举顺序有关,默认排序可能按定义顺序。非法值的处理还要看 SQL 模式。