红磨坊丫 發表於 2026-3-25 15:07:00

Spring Boot 3.x 整合AI大模型实战:手把手带你接入DeepSeek API

<h2>前言</h2>
<p>MySQL索引是数据库性能优化的核心,掌握索引原理和优化技巧是后端开发的必备技能。本文从原理到实战,带你全面掌握MySQL索引优化。</p>
<h2>一、索引是什么?</h2>
<p>索引类似书的目录,帮助MySQL快速定位数据,避免全表扫描。</p>
<p><strong>索引类型:</strong></p>
<ul>
<li><strong>主键索引</strong>:数据行的物理存储顺序</li>
<li><strong>唯一索引</strong>:允许NULL,不允许重复值</li>
<li><strong>普通索引</strong>:基本的索引类型</li>
<li><strong>联合索引</strong>:多列组合索引</li>
<li><strong>全文索引</strong>:用于文本搜索</li>
</ul>
<h2>二、B+树原理</h2>
<p>MySQL使用B+树作为索引结构:</p>
<ul>
<li>非叶子节点只存储键值和指针</li>
<li>叶子节点存储所有数据</li>
<li>叶子节点形成双向链表,方便范围查询</li>
</ul>
<h2>三、10个优化技巧</h2>
<h3>技巧1:最左匹配原则</h3>
<pre><code>-- 联合索引 (a, b, c)
-- 有效查询
WHERE a = 1
WHERE a = 1 AND b = 2
WHERE a = 1 AND b = 2 AND c = 3
-- 无效查询
WHERE b = 2-- 不满足最左匹配
WHERE c = 3</code></pre>
<h3>技巧2:避免索引列计算</h3>
<pre><code>-- 索引失效
WHERE YEAR(create_time) = 2024
-- 优化为
WHERE create_time &gt;= '2024-01-01' AND create_time &lt; '2025-01-01'</code></pre>
<h3>技巧3:避免索引列函数</h3>
<pre><code>-- 索引失效
WHERE LOWER(name) = 'zhangsan'
-- 优化为
WHERE name = 'zhangsan' OR name = 'ZHANGSAN'</code></pre>
<h3>技巧4:避免隐式类型转换</h3>
<pre><code>-- phone字段是VARCHAR,索引失效
WHERE phone = 13800138000
-- 优化为
WHERE phone = '13800138000'</code></pre>
<h3>技巧5:避免SELECT *</h3>
<pre><code>-- 只查询需要的列,利用覆盖索引
SELECT id, name FROM user WHERE name = 'zhangsan'</code></pre>
<h3>技巧6:LIKE优化</h3>
<pre><code>-- 索引失效
WHERE name LIKE '%zhang%'
-- 可用索引
WHERE name LIKE 'zhang%'</code></pre>
<h3>技巧7:OR改UNION</h3>
<pre><code>-- 索引可能失效
WHERE a = 1 OR b = 2
-- 优化为UNION
SELECT * FROM t WHERE a = 1
UNION
SELECT * FROM t WHERE b = 2</code></pre>
<h3>技巧8:使用EXPLAIN分析</h3>
<pre><code>EXPLAIN SELECT * FROM user WHERE name = 'zhangsan'
-- 关注:type(ALL/const/ref/range/index)、key(实际使用的索引)、rows(扫描行数)</code></pre>
<h3>技巧9:小表驱动大表</h3>
<pre><code>-- 小表驱动大表
SELECT * FROM small_table s
INNER JOIN large_table l ON s.id = l.sid</code></pre>
<h3>技巧10:定期分析和优化表</h3>
<pre><code>ANALYZE TABLE user;
OPTIMIZE TABLE user;</code></pre>
<h2>四、索引失效场景汇总</h2>
<ul>
<li>索引列参与计算</li>
<li>索引列使用函数</li>
<li>LIKE以%开头</li>
<li>OR前后列都有索引但类型不同</li>
<li>隐式类型转换</li>
<li>!= 或 &lt;&gt; 比较</li>
<li>IS NULL / IS NOT NULL(取决于数据分布)</li>
</ul>
<h2>总结</h2>
<p>掌握索引优化技巧,可以让数据库查询性能提升10倍甚至更多。记住:索引不是越多越好,要根据实际查询场景设计。</p>
<p><em>本文由AI辅助创作。</em></p>

</div>
<div id="MySignature" role="contentinfo">
   

---

📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**

💬 有问题或建议?欢迎在评论区留言讨论~

🔗 更多技术干货请关注作者:弥烟袅绕

📚 本文地址:https://www.cnblogs.com/czlws/p/19770333<br><br>
来源:https://www.cnblogs.com/czlws/p/19770333
頁: [1]
查看完整版本: Spring Boot 3.x 整合AI大模型实战:手把手带你接入DeepSeek API