博客
关于我
mysql 索引
阅读量:793 次
发布时间:2023-02-11

本文共 1645 字,大约阅读时间需要 5 分钟。

数据库索引的优化与使用技巧

索引是数据库中的重要结构,用于加速查询操作,但其创建与管理也需要注意事项。本文将详细介绍索引的原理、类型及其使用方法。

索引的基本原理

索引通过预先组织数据,实现快速查找功能。常见的存储结构包括 B树和哈希表。与哈希表不同,B树能够支持范围查询,因此在数据库引擎中更为广泛应用,如 InnoDB 引擎就使用 B 树结构。

索引的类型与特点

  • 普通索引

    • 优点:加速查找。
    • 缺点:不支持唯一性约束。
  • 唯一索引

    • 优点:加速查找,确保数据唯一性。
    • 缺点:不能有重复值。
  • 组合索引

    • 优点:支持多列联合查询,加速复杂查找。
    • 结构特点:第一列必须是主键或唯一索引。
  • 主键索引

    • 优点:强制唯一性,快速定位。
    • 必要条件:主键字段必须非空。
  • 索引的创建与管理

    创建索引

    • 普通索引

      代码示例:

      CREATE TABLE tb10 (    nid INT,    age INT,    INDEX id_index (nid));

      可在建表时或表创建后单独执行:

      CREATE INDEX id_index ON tb10 (nid);
    • 唯一索引

      CREATE TABLE tb11 (    nid INT,    age INT,    UNIQUE uniq_index (nid));

      或动态创建:

      CREATE UNIQUE INDEX id_index ON tb11 (nid);
    • 组合索引

      CREATE TABLE tb10 (    nid INT,    age INT,    INDEX id_index (nid, age));

      动态创建示例:

      CREATE INDEX id_index ON tb10 (nid, age);

    删除索引

    • 普通索引删除:
      DROP INDEX id_index ON tb10;
    • 唯一索引删除:
      DROP UNIQUE INDEX id_index ON tb10;

    查询索引信息

    使用 SHOW INDEX 命令查看索引详情:

    SHOW INDEX FROM tb10;

    索引使用注意事项

  • 避免使用 SELECT *

    具体列明需要查询的字段:

    SELECT age, nid FROM tb10 WHERE ...;
  • 优化查询条件

    使用 COUNT(列名) 代替 COUNT(*)

    COUNT(`age`); -- 更高效
  • 索引关键点

    • 对于重复值较少的列,索引效果有限。
    • 建议使用 CHAR 而非 VARCHAR
    • 对于 TEXT 列,建议创建短索引(如 16 个字符)。
  • 特殊查询优化

    • 不支持索引的操作包括 >, OR, LIKE 等。
    • 函数操作和类型不匹配会影响索引使用。
  • 执行计划解读

    使用 EXPLAIN 分析查询性能:

    • type 字段表示访问方式,如 index 表示使用了索引。
    • 常见类型包括 allindexrangeindex_merge 等。

    慢日志处理

  • 配置方法
    • 修改配置文件立即生效:
      SET global slow_query_log = 1; -- 查看当前配置
    • 文件配置需服务器重启后生效。
  • MySQL 分页优化

  • 简单分页

    SELECT * FROM tb10 LIMIT 10, 10;

    优点:直接可用,缺点:扫描全表。

  • 主键分页

    • 记录最大和最小 ID 值:
      SELECT * FROM tb10 WHERE id > max_id LIMIT 10;
    • 逆序查询:
      SELECT * FROM tb10 WHERE id < min_id ORDER BY id DESC LIMIT 10;
  • 多行分页

    SELECT * FROM tb10 WHERE id IN (SELECT id FROM tb10 WHERE id > max_id ORDER BY id DESC LIMIT 30) LIMIT 10;
  • 通过以上方法,合理使用索引和分页策略,可以显著提升数据库查询性能。

    转载地址:http://cbbfk.baihongyu.com/

    你可能感兴趣的文章
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>
    MySQL 导出数据
    查看>>
    mysql 将null转代为0
    查看>>
    mysql 常用
    查看>>
    MySQL 常用列类型
    查看>>
    mysql 常用命令
    查看>>
    Mysql 常见ALTER TABLE操作
    查看>>
    MySQL 常见的 9 种优化方法
    查看>>
    MySQL 常见的开放性问题
    查看>>
    Mysql 常见错误
    查看>>
    mysql 常见问题
    查看>>
    MYSQL 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    查看>>
    MySQL 快速创建千万级测试数据
    查看>>