MySQL SQL优化
MySQL SQL优化
1、建表
1)、主键使用合适的无符号unsigned整型自增(避免数据增加时索引页分裂)
2)、长度固定的字符串字段使用CHAR类型,Varchar会额外使用1或者2个字节(长度小于255使用1字节)存储字符串长度
3)、选择合适的字符串数据类型和日期类型(优先TIMESTAMP,占用4字节)
2、索引
1)、使用单独的列(不对索引进行表达式或者函数运算)
2)、对于BLOB、TEXT或者很长的VARCHAR类型的列,使用前缀索引
3)、多列索引选择合适的索引列顺序(索引列的选择度和最左原则)
4)、能使用覆盖索引的使用覆盖索引、使用索引排序
5)、索引列字段应不为NULL(会导致索引失效,若是唯一索引,多列可以有NULL值,使唯一索引失效)
6)、索引保持在5条左右,多的话影响插入和更新性能
3、查询(避免索引失效)
1)、使用EXPLAIN查询SQL优化器执行计划,调整SQL查询
2)、使用not exists代替not in,not in不会使用索引(not in不是绝对不走索引,若not in的条件记录很少时,会走索引)
3)、查询条件避免使用前导模糊查询,如'%xxx',因为无法使用索引
4)、查询条件使用or的话,要保证or两边的列都要有索引,否则索引失效(对没有索引的列会全表扫描)
5)、索引列字符串类型,WHERE条件为数字型时,索引失效(因为这样MySQL会讲表中字符串类型转换为数字之后再比较,导致索引失效)。所以,字符类型的索引列要加引号
6)、多列索引要满足最左前缀要求
7)、ISNULL判断不走索引,要慎用(测试证明is null会走索引)
8)、范围索引列要放到最后
9)、不要在索引列上进行计算、不要使用函数
10)、不要使用select *
11)、LIMIT分页的页码不能太大,会查询出所有的结果然后丢弃掉不需要的。使用主键做连接查询
END.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类