Mysql 优化技术

本文提供了Mysql数据库优化的十大技巧,包括避免使用select *、使用limit限制查询结果、优化where子句、改进分页查询、优化like语句、避免在where子句中使用表达式操作、优化join操作、避免使用!=或<>操作符、使用explain分析SQL计划及为每张表设置一个ID。通过这些技巧,可以显著提升数据库查询效率。

Mysql数据库优化

1、查询SQL尽量不要使用select ※,而是使用具体的字段 select id

例如:

select id from TEST_TABLE;

说明:select *查询时,可能不会使用到覆盖索引,导致回表查询。

2、查询结果只有一条记录或者只要最大或最小的记录,建议使用 limit 1
例如:

select id,name from TEST_TABLE where name='shun' limit 1;

说明:limit主要是防止全表扫描,从而提高性能。

3、尽量避免在where字句中使用or来作连接条件
错误例子:

select * from TEST_TABLE WHERE id=1 or age=2;

正确例子:使用union all 或者 分开写sql

select * from TEST_TABLE where id=1 union all select * from TEST_TABLE WHERE age=2;

说明:使用or查询可能会导致索引失效,从而全表扫描。

4、limit分页优化
需求:作分页时,一般会使用limit实现,当偏移量特别大时,查询效率变低。
错误例子:

select id,name,age from TEST_TABLE limit 1000010;

正确例子:
①返回上次查询的最大偏移量,这样可以跳过偏移量。

select id,name from TEST_TABLE where id>10000 limit 10;

②order by +索引查询

select id,name from TEST_TABLE order by id limit 1000010;

5、优化like语句
把%放前面,不走索引
把%放关键字后面,走索引
例如:

select id,name from TEST_TABLE where name like '蔡%';

6、不要再where子句中对字段进行表达式操作
错误例子:

select * from TEST_TABLE where age-1 = 10;

说明:这样会导致索引失效,从而全表扫描。

7、Inner join 、left join、right join,优先使用Inner join,如果是left
join,左边表数据比右边表要小

连接类型说明
Inner join 内连接只保留两张表中完全匹配的结果集
left join 左连接会返回左表所有的行,即使在右表中没有匹配的记录
right join右连接会返回右表所有的行,即使在左表中没有匹配的记录

错误例子:

select * from TEST_TABLE1 t1 left join TEST_TABLE2 t2 on t1.age = t2.age where t1.id>2;

正确例子:

select * from (select * from TEST_TABLE1 where id>2) t1 left join TEST_TABLE2 t2 on t1.age = t2.age;

说明:
使用左连接,条件语句放在左边处理,意味着左边返回的行数会变小,从而提高性能。
8、避免在where子句中使用!=或<>操作符
错误例子:

select age,name from TEST_TABLE where age <>18;

正确例子:分开两条sql来写

select age,name from TEST_TABLE where age <18;
select age,name from TEST_TABLE where age >18;

说明:使用!=和<>可能会让索引失效。

9、使用explain分析SQL的计划

explain select * from TEST_TABLE where id=2 or age =18;

说明:可以查看是否有索引。

10、永远为每张表设置一个ID

每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用
UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。

11、使用ENUM而不是VARCHAR

ENUM 类型是非常快和紧凑的。
比如“性别”,“国家”,“民族”,“状态”,“部门”等,这些字段的取值是有限而且固定的,应该使用ENUM 而不是VARCHAR。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值