两张表,如果你只需要一张表的数据且这张表的数据依赖另一张表的数据作为过滤条件,则用子查询。
如果涉及两张表的数据查询,则使用join关联
1.round函数
a.round(x) x最接近的整数
e.g. round(2.5) 取3
b. round(x,d) d是保留d位小数
e.g. round(2.456,0) 不保留小数位 返回2.0
2.时间函数
获取当前时间 select now() / select sysdate()
获取当前日期 select curDate()
日期 —> 字符串:Date_format(时间戳,‘%Y%m%d’)
字符串 —> Datetime类型 str_to_date(str,format)
时间戳转成时间 from_unixtime(时间戳)
返回当前时间戳 Unix_timestamp()
from_unixtime函数
不管10位还是13位都是unix时间戳
a.10位时间戳转成日期
from_unixtime(x) x是十位时间戳 返回日期类型
b.13位时间戳转成日期
from_unixtime(round(x/1000,0)) 先把十三位变成十位,再返回日期类型
sql 调优 是一个持续的过程
可以添加limit关键字
选择exists 代替 in
使用表的别名 尽量避免全表扫描
数据库设计优化,避免数据冗余
使用参数化查询,不仅提高sql执行效率,而且防止sql注入
python中引入pymysql
监控和分析,定期分析日志,找出执行效率低下的sql语句
使用性能分析工具 explain,找出性能瓶颈
not in 和 not exists的区别
性能 not in 不走索引
not in 字段为null的不进行筛选
coalesce
返回参数列表中第一个非Null值
ifnull(a,b)
第一个值不为空则返回,为空则返回第二个值
ifnull只有两个参数,而coalesce有两个以上的参数
between and 是闭区间