Mysql 优化技术

   日期:2020-07-11     浏览:79    评论:0    
核心提示: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、尽量避

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。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服