sql 有时候还是挺有意思的,有时候不只是crud
下面来看一道sql 题,第一个题解能跑完,但是超时
浮躁的人总是很难看的进去,有时候孤单又在所难免,所以啊 要继续坚持,原来中学老师讲的那句,要耐住寂寞,是任何时候适用
首先要 确定一个用户是在首单完成即时订单的,然后统计所有用户
select round(order_date = customer_pred_delivery_date) / count(*) *100 , 2) as immediate_percentage
from Delivery as d
where (customer_id , order_date) in
(select customer_id, min(order_date) from Delivery gtoup by customer_id);
# 用join 代替子查询
# 为什么join 会比多次 查询效率高呢?
# join 会把多张表整合,然后一次扫描处理所有的表,而多次查询会进行多次扫描,多次IO操作
#可读性提高了,那么维护性也自然提高了。 使用join明显的可以清晰的表达查询意图和逻辑,易于阅读和理解
#然后扩展性也提高了,join 操作上面也讲了,可以方便添加更多的连接条件和连接表,实现更复杂的查询逻辑。
select round(sum(order_date) = customer_pref_delivery_date) / count(*) *100 ,2) as immediate_percentage
from Delivery as d
join(select customer_id, min(order_date) as min_order_date from Delivery group by customer_id) as min_dates on d.customer_id = min_dates.customer_id and d.order_date = min_dates.min_order_date;
贴张图,讲一下常见都有哪些优化
# 优化sql 的常见方式有:
#1.选合适的字段属性,从分配的空间、到采用数值型数据替代文本数据,如省份、性别
#2.使用join 替代 子连接 原因上面也已经讲了。
#3.使用union 替代手动创建临时表
#4.事务,怎么理解呢?就像使用命令的时候 同时 && 必然前面出现意外后面的语句是无法执行的,当sql复杂起来,比如设计子查询、连接、联合等,把系列的sql语句用一条或者几条sql 处理
BEGIN;
INSERT INTO salesinfo SET customerid=14;
UPDATE inventory SET quantity =11 WHERE item='book';
COMMIT;
begin 表示开始,commit 表示结束。
#5. 锁定表 又挺矛盾的,需要事务,但是又认为开销大,所以上表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。
#6.使用外键
锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。
#优化索引
#优化查询语句