当前位置: 首页 > wzjs >正文

开发网站制作企业宣传视频

开发网站制作,企业宣传视频,如何网站建设网站,查询企业信息的官方网站1. 索引失效的常见原因 虽然索引可以加速查询&#xff0c;但在某些情况下&#xff0c;MySQL 可能不会使用索引&#xff0c;甚至使用索引反而更慢。 以下是一些常见导致索引失效的原因&#xff1a; ① 查询条件使用了 ! 或 <> 原因&#xff1a;索引通常用于范围或等值查…

1. 索引失效的常见原因

虽然索引可以加速查询,但在某些情况下,MySQL 可能不会使用索引,甚至使用索引反而更慢
以下是一些常见导致索引失效的原因:

① 查询条件使用了 != 或 <>
  • 原因:索引通常用于范围或等值查询,而 != 无法高效利用 B+ 树索引。

  • 示例

    SELECT * FROM users WHERE age != 30;
    
    • 失效原因!= 使 MySQL 需要扫描大量行,索引无法高效过滤。
② OR 连接多个条件,但只有部分字段有索引
  • 示例

    SELECT * FROM users WHERE age = 30 OR name = 'Alice';
    
    • 失效原因:如果 name 字段没有索引,MySQL 可能选择 全表扫描 而不是使用 age 的索引。
  • 优化方法:为 name 字段也添加索引,或者拆分查询:

      SELECT * FROM users WHERE age = 30
    UNION
    SELECT * FROM users WHERE name = 'Alice';
    
③ LIKE 以 % 开头
  • 示例

    SELECT * FROM users WHERE name LIKE '%Alice%';
    
    • 失效原因:B+ 树索引按照前缀匹配,以 % 开头无法使用索引。

    • 优化方法:

      • 如果 name需要前缀匹配,可以使用

        前缀索引:

        CREATE INDEX idx_name ON users(name(3)); -- 仅索引前3个字符
        
      • 或者改用,全文索引:

        ALTER TABLE users ADD FULLTEXT(name);
        SELECT * FROM users WHERE MATCH(name) AGAINST('Alice');
        
④ 隐式类型转换
  • 示例

    SELECT * FROM users WHERE phone = 13800001234;  -- phone 是 VARCHAR 类型
    
    • 失效原因phoneVARCHAR,但查询时写成 INT,MySQL 进行隐式转换,导致索引失效。

    • 优化方法:使用正确的数据类型:

         
      SELECT * FROM users WHERE phone = '13800001234';
      
⑤ IS NULL 或 IS NOT NULL
  • 示例

    SELECT * FROM users WHERE address IS NULL;
    
    • 失效原因:B+ 树索引不存储 NULL 值,查询 NULL 可能导致索引失效。
  • 优化方法

    • 避免 NULL 值,改用默认值:

      ALTER TABLE users MODIFY address VARCHAR(255) NOT NULL DEFAULT '';
      
    • 使用 col IS NOT NULL 可能仍然走索引(视索引情况而定)。

⑥ 低选择性字段
  • 示例

    • 失效原因gender 只有 malefemale,选择性低,索引加速效果不明显,MySQL 可能选择全表扫描。
  • 优化方法

    • 索引一般适用于高选择性字段,如 idemail

    • 如果 gender 需要频繁查询,可以考虑

      联合索引,例如:

      CREATE INDEX idx_gender_age ON users(gender, age);
      

      这样,查询 WHERE gender = 'male' AND age > 30时仍能利用索引。


2. 如何排查索引效果?

可以使用 EXPLAIN 命令分析 SQL 是否走索引,以及索引的效率。

① 使用 EXPLAIN 分析 SQL 执行计划
EXPLAIN SELECT * FROM users WHERE age = 30;

返回示例:

idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
1SIMPLEusersrefidx_ageidx_age4const10Using index
  • type = ref:表示使用了索引。
  • key = idx_age:表示使用了 age 索引。
  • rows = 10:表示扫描了 10 行数据,索引效果较好。

如果 type = ALL,表示全表扫描,说明索引可能失效!


② SHOW INDEX FROM table_name 查看索引
SHOW INDEX FROM users;

查看表 users 上的索引信息,确认索引是否创建正确。


③ ANALYZE TABLE & OPTIMIZE TABLE

如果表数据更新较多,索引可能变得不高效,可以手动优化:

ANALYZE TABLE users;  -- 更新索引统计信息
OPTIMIZE TABLE users; -- 重建索引

总结

影响索引使用的因素是否会导致索引失效解决方案
!= / < >✅ 失效改用 BETWEENIN
OR 但部分字段无索引✅ 失效拆分查询或为所有字段加索引
LIKE '%xxx%'✅ 失效改用前缀索引或全文索引
类型转换✅ 失效确保查询和字段类型一致
IS NULL✅ 可能失效使用默认值替代 NULL
低选择性索引✅ 可能失效使用联合索引提高选择性
EXPLAIN 显示 ALL✅ 失效重新设计索引或优化 SQL

使用 EXPLAIN + SHOW INDEX + ANALYZE TABLE 等工具,可以有效排查 MySQL 索引是否生效,并进行优化。


希望这份索引优化指南对你有帮助!如果有任何疑问,欢迎继续探讨 😊🚀

http://www.dtcms.com/wzjs/494725.html

相关文章:

  • 天津医疗行业网站建设站长统计app软件
  • 旅游网站网页设计模板代码网络推广一个月的收入
  • bootstrap微网站模板cba排名最新排名
  • wordpress建站注册新用户官网seo哪家公司好
  • 广西通信规划设计咨询有限公司网站推广优化服务
  • 优设网页官网免费seo网站推广
  • 什么网站排名做的最好百度seo排名曝光行者seo
  • django做网站好吗青岛爱城市网app官方网站
  • 纯静态网站页面优化游戏推广渠道
  • 网站开发人员工作内容重庆 seo
  • 新余公司做网站4p营销理论
  • dw网站站点建立后怎么做百度推广登录首页官网
  • 北京模板建站软件深圳市住房和建设局官网
  • 做网站相册如何建造一个网站
  • 网站建设公司的pest分析品牌运营具体做什么
  • 怎样建设一个游戏网站怎么优化电脑系统
  • 电子商务网站建设的核心是什么怎么自己开网站
  • 如何免费建设网站营销推广的公司
  • 添加网站到百度线下课程seo
  • 海南的网站建设公司武汉竞价托管公司
  • 网站开发的工作总结天津网站推广
  • 有了域名后怎样做网站网站分析报告范文
  • 建设企业网站哪家有实力怎么投放网络广告
  • 泉州网站优化2345浏览器网站进入
  • 西安专业网站建设价格上海单个关键词优化
  • 新余市建设厅网站宁波网站建设制作报价
  • 装饰公司加盟云优客seo排名公司
  • wordpress唱片公司模板百度seo优化推广公司
  • 济南自适应网站建设合肥seo排名扣费
  • 美食网站开发毕业设计的主要内容成人培训机构