mysql 优化(2)索引优化策略

1:索引类型

索引: 作用快速查询;

649.jpg

节点第1层 , 2的0次方

节点第1层 , 2的1次方

节点第3层 , 2的2次方

节点第4层 , 2的3次方

节点第5层 , 2的4次方

.。。。

。。。

。。。

节点第31层 , 2的32次方

加起来 42亿

也就是说 42 亿个数字 最多查 32 次就可以了

普通查询要查21亿次

这就是—–》 B-tree索引

注: 名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,各引擎稍有不同,

比如,严格的说,NDB引擎,使用的是T-tree

Myisam,innodb中,默认用B-tree索引

但抽象一下—B-tree系统,可理解为”排好序的快速查找结构”. 

1.2 hash索引 弹簧哈哈哈哈。。。尼玛尼玛。。。

在memory表里,默认是hash索引,
hash的理论查询时间复杂度为O(1)

疑问: 既然hash的查找如此高效,为什么不都用hash索引?

答: 

1:hash函数计算后的结果,是随机的,如果是在磁盘上放置数据,
用 算法。。。。。

比主键为id为例,那么随着id的增长,
id对应的行,在磁盘上随机放置.散落的无规律!!

散列算法 分配磁盘空间毫无规律可言!!!

2: 无法对范围查询进行优化. 3:无法利用前缀索引. 

比如 在btree中, field列的值“hellopworld”,并加索引

查询 xx=helloword,自然可以利用索引, xx=hello,也可以利用索引.
(左前缀索引) 

因为hash(‘helloword’),和hash(‘hello’),两者的关系仍为随机

4: 排序也无法优化.

5: 必须回行.就是说 通过索引拿到数据位置,必须回到表中取数据 

——》回行查找 就说只是个字典的目录 必须再去实际翻页

2: btree索引的常见误区

2.1 在where条件常用的列上都加上索引

例: where cat_id=3 and price>100 ; //查询第3个栏目,100元以上的商品

误: cat_id上,和, price上都加上索引.

错: 只能用上cat_id或Price索引,因为是独立的索引,同时只能用上1个.

alter table add index(cat_id)

alter table add index(price)

alter table add index(goods_id) —————————同时只能用一个 所以。。。。 联合索引 把多个列看成整体的值

index(cat_id ,goods_name, price) ————————— 把多个列看成整体的值

2.2 在多列上建立索引后,查询哪个列,索引都将发挥作用

误: 多列索引上,索引发挥作用,需要满足左前缀要求.
///做前缀要求

以 index(a,b,c) 为例,(注意和顺序有关)

语句

   索引是否发挥作用

   

Where a=3

   是,只使用了a列

   

Where a=3 and b=5 

   是,使用了a,b列

   

Where a=3 and b=5 and c=4

   是,使用了abc

   

Where b=3 / where c=4

   否

   

纳米搜索 纳米搜索

纳米搜索:360推出的新一代AI搜索引擎

纳米搜索 30 查看详情 纳米搜索

Where a=3 and c=4

   a列能发挥索引,c不能

   

Where a=3 and b>10 and c=7

   A能利用,b能利用, C不能利用

   

同上,where a=3 and b like ‘xxxx%’ and c=7

   A能用,B能用,C不能用

   

为便于理解, 假设ABC各10米长的木板,河面宽30米.

精确匹配,则木板长10米,

Like,左前缀及范围查询,则木板长5米,

自己拼接一下,能否过河对岸,就知道索引能否利用上.

如上例中, where a=3 and b>10, and c=7,

A板长10米,A列索引发挥作用

A板正常接B板, B板索引发挥作用

B板短了,接不到C板,
C列的索引不发挥作用.

 以上就是mysql 优化(2)索引优化策略的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/419157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 08:49:49
下一篇 2025年11月7日 08:50:45

相关推荐

  • MySQL网络延迟性能优化_MySQL减少响应时间方法

    mysql网络延迟问题可通过多层面诊断与优化解决。1.诊断需从网络、mysql状态、数据包分析及系统资源四方面入手;2.调整tcp_nodelay、socket_buffer_size、max_allowed_packet等参数;3.使用连接池、长连接、查询缓存减少连接开销;4.sql优化包括精简字…

    2025年12月4日 数据库
    000
  • sql中索引优化的方法 索引失效的常见原因及解决方案

    索引优化通过提升查询速度改善数据库性能,但需避免失效问题。1.选择合适索引类型如b-tree用于范围查询、哈希索引用于等值查询;2.创建组合索引时将高选择性列置于前;3.避免在where子句中使用函数或表达式;4.定期维护索引以减少碎片化。常见失效原因及对策包括:1.where中使用or可拆分为独立…

    2025年12月3日 数据库
    000
  • postgresqljsonb查询如何提速_postgresqljsonb索引优化

    使用GIN索引可显著提升PostgreSQL中JSONB字段的查询性能,针对不同场景选择jsonb_ops或jsonb_path_ops索引类型,并结合表达式索引、组合索引优化特定字段和多条件查询,避免函数处理与模糊查询陷阱,定期ANALYZE更新统计信息以支持最优执行计划。 PostgreSQL …

    2025年12月2日 数据库
    000
  • mysql查询响应如何加速_mysql优化漏斗模型

    先检查硬件与系统资源,确认磁盘IO、内存和CPU是否瓶颈,避免盲目优化SQL。 MySQL查询响应变慢,往往不是单一问题导致的。要系统性优化,可以借助“优化漏斗模型”——从宏观到微观逐层排查,过滤掉非关键因素,精准定位瓶颈。这个模型帮助你按优先级处理问题,避免盲目调优。 1. 检查硬件与系统资源 在…

    2025年12月2日 数据库
    000
  • MySQL性能优化之一:提高MySQL并发能力的思路

    1、使用行级别锁,避免表级别或页级别锁尽量使用支持行级别锁的存储引擎,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库类的应用)使用表级别锁的存储引 1、使用行级别锁,避免表级别或页级别锁 尽量使用支持行级别锁的存储引擎,虚拟主机,如InnoDB;只在读操作显著多于写作的场景中(如数据仓库…

    2025年12月2日
    000
  • 如何通过索引对MySQL优化

    %ignore_a_1%可对mysql进行优化,当数据表的数据什分庞大时就可以通过建立索引来解决这个问题,索引将表中的数据按照字母的顺序存储在单独的位置上来优化数据库性能 MySQL中的数据库索引可以帮助我们优化性能,对于小型的数据表来说可能差异性很小但是对于拥有大量数据的表来说,索引有明显的提高性…

    2025年12月2日 数据库
    000
  • 如何在mysql中使用索引优化查询

    合理使用索引可提升查询性能,核心是避免全表扫描并遵循最左前缀原则;应为WHERE、JOIN、ORDER BY等常用字段建索引,优先考虑覆盖索引以减少回表;注意索引维护成本,避免在索引列使用函数、隐式转换或前导通配符导致失效;通过EXPLAIN分析执行计划,结合慢查询日志持续优化索引策略。 在MySQ…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化网络延迟影响

    降低MySQL网络延迟需从连接管理、数据传输和架构设计入手,使用连接池减少握手开销;2. 通过批量操作、存储过程减少往返次数;3. 启用压缩协议减小传输体积;4. 优化查询以减少数据传输量;5. 将数据库部署在靠近应用的节点或使用本地只读副本缩短物理距离,提升响应速度。 MySQL的性能不仅依赖于服…

    2025年12月2日 数据库
    000
  • mysql如何优化OR条件_mysql OR条件查询优化方法

    使用UNION替代OR可提升索引效率,确保OR字段均有索引以启用index_merge,合理创建复合索引,重写查询为IN或范围条件减少OR使用,结合EXPLAIN分析执行计划优化查询路径。 在MySQL中,OR条件查询常常会导致索引失效,从而引发全表扫描,影响查询性能。优化OR查询的关键在于确保查询…

    2025年12月2日 数据库
    000
  • mysql数据库优化的基本概念_mysql数据库优化概念方法

    MySQL优化需从索引、SQL语句、表结构和配置参数入手。1. 合理创建索引,遵循最左前缀原则,避免冗余;2. 优化SQL,避免全表扫描和函数操作导致索引失效;3. 设计规范的表结构,选择合适数据类型并适度反范式化;4. 调整innodb_buffer_pool_size、max_connectio…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化锁等待_mysql锁等待优化技巧

    答案:优化MySQL锁等待需缩短事务周期、合理使用索引、选择合适隔离级别并避免死锁。具体包括避免长事务、移出非数据库操作、及时提交、批量更新;确保WHERE条件走索引,避免全表扫描;优先使用READ COMMITTED减少间隙锁;统一访问顺序降低死锁风险,应用层实现重试机制。定期分析执行计划与死锁日…

    2025年12月2日 数据库
    000
  • mysql如何优化排序文件_mysql排序文件优化方法

    优先创建联合索引(如idx_city_age)使排序字段有序,避免filesort;确保索引顺序与ORDER BY一致,覆盖查询字段减少回表;MySQL 8.0+支持混合排序方向;无法避免时调大sort_buffer_size至1MB~8MB减少磁盘I/O;用EXPLAIN FORMAT=JSON检…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化数据库性能_mysql性能优化方法

    数据库性能优化是提升系统响应速度和稳定性的关键环节。在MySQL中,合理的配置、索引设计和查询优化能显著提高运行效率。以下是一些实用且有效的MySQL性能优化方法。 合理使用索引 索引是提升查询速度最直接的方式,但不恰当的使用反而会拖慢写入性能。 建议: 为频繁用于WHERE、JOIN、ORDER …

    2025年12月2日 数据库
    000
  • 如何在mysql中优化多表连接_mysql多表连接优化技巧

    答案:优化MySQL多表连接需确保连接字段有索引、提前过滤数据、选择合适JOIN类型并利用EXPLAIN分析执行计划。具体包括在ON字段创建索引(如表B.a_id),减少扫描行数,优先使用INNER JOIN,避免全表扫描和临时表,通过执行计划持续调优以提升性能。 在MySQL中进行多表连接查询时,…

    2025年12月2日 数据库
    000
  • 如何在mysql中使用前缀索引_mysql前缀索引优化方法

    前缀索引是对字符串前N个字符创建索引,用于节省空间并提升查询效率,适用于VARCHAR等长字段;通过计算不同长度下的唯一值比例选择最佳前缀长度,确保高选择性;但不支持ORDER BY、GROUP BY和覆盖索引,需结合业务数据分布权衡长度。 在MySQL中,当字段内容较长时(如VARCHAR(255…

    2025年12月2日 数据库
    000
  • mysql中查询优化器的操作

    查询优化器的核心任务是生成高效执行计划,通过分析语法树、生成候选方案、估算成本并选择最优路径来提升SQL执行效率,其决策受索引统计、WHERE条件、JOIN顺序和数据类型匹配影响,开发者可通过EXPLAIN分析、强制索引、调整optimizer_switch等手段干预,需注意统计信息更新与复杂查询的…

    2025年12月2日 数据库
    000
  • mysql索引覆盖如何做到_mysql覆盖索引解析

    覆盖索引是指查询所需字段均包含在某个索引中,无需回表获取数据。例如在users表中对(name, age)建立联合索引后,执行SELECT name, age FROM users WHERE name = ‘John’可直接从索引获取数据,执行计划的Extra显示Using…

    2025年12月2日 数据库
    000
  • MySQL Order By索引优化方法

    在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序 尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。 使用索引的MySQL …

    数据库 2025年12月2日
    000
  • MySQL优化之分区表_MySQL

    当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种:   1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。     优点:提高并发量,减小锁的粒度    缺点:代码维护成本高,相关sql都需要改动   2、分区,所有的数据还在一个…

    2025年12月2日 数据库
    000
  • 如何在mysql中优化OR条件_mysql OR条件优化方法

    优化OR查询需确保各条件字段有独立索引,优先用UNION ALL拆分不同字段的OR,同字段多值OR改写为IN,避免函数导致索引失效。 在MySQL中,OR条件常常会导致查询性能下降,尤其是在没有合理索引支持的情况下。MySQL执行带有OR的查询时,优化器可能无法有效使用索引,甚至会退化为全表扫描。因…

    2025年12月2日 数据库
    000

发表回复

登录后才能评论
关注微信