本文共 1703 字,大约阅读时间需要 5 分钟。
索引是数据库查询性能的重要因素,但并非所有情况都适合使用。索引的基数是数据列中不同值的数量,基数越高,索引越有用。例如,包含多个不同年龄值的字段,索引会显著提升查询效率。而性别字段(如仅有“M”和“F”)由于值重复率高,索引的帮助不大,甚至可能引发全表扫描。
varchar字段用于number类型的where条件,索引会被忽略。ROUND()),需要建立基于函数的索引。MySQL 8.0支持直接索引函数字段,5.7可通过虚拟列实现。is null和is not null索引会失效。DESC或EXPLAIN分析SQL语句。EXPLAIN extended查看实际执行计划,分析查询性能。where条件可下推到存储引擎,提升查询效率。Using index:覆盖索引。Using filesort:MySQL无法利用索引排序。Using temporary:查询涉及排序操作。impossible where:where条件总是错误,无法获取数据。select optimized away:优化了MIN/MAX或COUNT(*)操作。distinct:优化distinct操作,早止重复值查找。type: system:系统表,常见于const类型。const:主键或唯一索引扫描。eq_ref:唯一性索引扫描。ref:非唯一性索引扫描。range:基于范围条件的扫描。index:全表索引扫描。all:全表扫描。utf8:最大支持3个字节,不支持emoji,需使用utf8mb4。utf8mb4:支持emoji,需在配置文件中指定客户端字符集,并在连接池中设置初始化SQL。utf8_general_ci:大小写不敏感。utf8_bin:区分大小写,常用于区分大小写敏感的场景。INSERT IGNORE INTO。INSERT ... ON DUPLICATE KEY UPDATE。REPLACE INTO。CREATE TABLE ... SELECT ...。CREATE TABLE ... LIKE ...。LOCK IN SHARE MODE。FOR UPDATE。FORCE INDEX。SQL_NO_CACHE。where而非having。group by优化。truncate会重置自增基数。SUM(NULL)返回NULL而非0。a = null永远为false,正确写法为a is null。pt-online-schema-change工具。通过以上优化,数据库性能将得到显著提升,建议结合实际业务场景,合理设计索引和查询策略,避免常见问题。
转载地址:http://phbfk.baihongyu.com/