Mysql 优化

本文介绍了MySQL优化的一些关键策略,包括使用中间变量开启查询缓存,理解并利用EXPLAIN进行查询分析,避免全表扫描,精确定义SELECT字段,以及根据业务需求创建合适的组合索引。对于处理大量数据的分页查询,合理使用LIMIT避免性能下降。优化MySQL的查询性能对于提升系统整体效率至关重要。
摘要由CSDN通过智能技术生成

1. 尽可能使用中间变量来开启查询缓存

// 查询缓存不开启 
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); 

// 开启查询缓存 
$today = date("Y-m-d"); 
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'"); 

2. EXPLAIN 你的 SELECT 查询
在这里插入图片描述

3. 取一条数据时加上limit 1、select 你想要的字段,最好不要用

在用sqlalchemy取数据时一般都会用到TableClass.query.filter. first() ,这将会翻译为limit 1

发现目前项目里大部分代码在取数据时都是 TableClass.query.filter.all() / first() , 翻译为 select * from Tableclass where field=xx
建议用with_entities来获取想要的字段而不是获取全部字段。

4. 根据业务建立适合的组合索引

User表    (key, name, city, age, .....)
select key from user where name='xxx' and city ='广州' and age = 25
ALTER TABLE user ADD INDEX name_city_age (name, City, Age); 

建立这样的组合索引,其实是相当于分别建立了 (最左前缀匹配原则)

name
name, city
name, city, age

处理千万级数据查询分页

Mysql的优化是非常重要的。其他最常用也最需要优化的就是limit。Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。

同样是取10条数据

  select * from big_table limit 90000,10        =8秒
        和
  select * from  big_table limit 100,10            =0.01

不是一个数量级别。

当offset 较小的时候直接limit, 如果offset 比较大的时候:

Select * From big_table Where vid >=(
  Select id From big_table Order By id limit 90000,1          = 0.19秒
  ) limit 10
  ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jewe_Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值