SQL遇到的问题及优化建议
SQL遇到的问题:
在数据库运行过程中,可能会遇到之前执行的SQL脚本突然变慢的情况。
出现这种情况的原因有很多,比如:
1.数据量激增到某一个点临界点时爆发; 2.缺少索引或是索引创建方式有问题; 3.出现锁等待或锁超时; 4.I/O的吞吐量不足; 5.网络带宽不足; 6.返回多余的列; 7.未做数据分区; 8.高并发; 9.表结构字段类型有问题; 10.数据库参数设置有问题。
此时就需要对SQL脚本进行优化或创建索引,修改表结构等。
索引相当于字典的目录。利用字典目录查找汉字的过程,就相当于利用SQL索引查找某条记录的过程。
SQL索引的好处
1.提高查询效率 2.降低CPU使用率
SQL索引的弊端
1.当数据量很大的时候,索引也会很大(当然相比于源表来说,还是相当小的) 2.索引并不适用于所有情况:a.少量数据;b.频繁进行改动的字段,不适合做索引;c.很少使用的字段,不需要加索引; 3.索引会提高数据查询效率,但是会降低“增、删、改”的效率。
几个优化小技巧
> 最佳字段做前缀,复合索引顺序和使用顺序一致,不要跨字段使用 > 添加索引的时候,要根据MySQL解析顺序添加索引 > 使用了in有时候会导致索引失效,尽量将in字段放在最后面。 > 不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效 > 索引不能使用不等于(!= <>)或is null (is not null),否则自身以及右侧所有全部失效(针对大多数情况)。复合索引中如果有>,则自身和右侧索引全部失效。 > like尽量以“常量”开头,不要以’%开头,否则索引失效 > 尽量不要使用类型转换(显示、隐式),否则索引失效 > 尽量不要使用or,否则索引失效 >如果主查询的数据集大,则使用in关键字,效率高。如果子查询的数据集大,则使用exist关键字,效率高。 > 避免使用select * …(select后面写所有字段,也比写*效率高) > 用where字句替换HAVING字句
参考地址:
下一篇:
Java连接MySQL实现增删改查