Problem_1 小金问呀问不会问题

本文介绍了一个简单的C语言编程题目,通过输入一个整数来判断学生的编程进步情况,并提供了完整的代码实现。
Problem Description

众所周知,C语言的学习是我们程序设计基础的重点和主要内容。
小金在班里是一个爱学习的好孩子,但是他的编程能力却有点差,不过他坚信自己一定可以进步并追上其他同学。
 

Input

多组输入。
从键盘读入一个整数n,如果n >= 0代表小金考试进步了,如果n < 0代表小金退步了。

Output

如果小明进步了输出”Yes”,反之输出”No”。输出不包括引号,输入输出各占一行,保证数据合法。

Example Input
100
-100
Example Output
Yes

No

#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { if(n>=0) printf("Yes\n"); else printf("No\n"); } return 0; }

要优化这个 SQL 查询语句以提高查询效率,可以从以下几个方面入手: ### 1. 索引优化 为 `WI_PROBLEM_HANDLE_INFO` 表的 `PROBLEM_TYPE`、`VIOLATION_TYPE`、`PROBLEM_BATCH_MONTH` `CERT_NUM_CODE` 列创建复合索引,这样可以加快子查询的数据检索速度。 ```sql CREATE INDEX idx_wi_problem_handle_info ON WI_PROBLEM_HANDLE_INFO (PROBLEM_TYPE, VIOLATION_TYPE, PROBLEM_BATCH_MONTH, CERT_NUM_CODE); ``` ### 2. 避免使用 `LIKE` 操作符 `LIKE` 操作符在使用通配符 `%` 时,无法有效利用索引,会导致全表扫描。可以考虑使用其他方式来替代,不过在这个查询中,如果业务逻辑确实需要使用模糊匹配,暂时无法避免。但可以尽量减少模糊匹配的范围。 ### 3. 优化子查询 可以将子查询的结果存储在临时表中,避免多次扫描 `WI_PROBLEM_HANDLE_INFO` 表。 ```sql -- 创建临时表存储第一个子查询的结果 CREATE TEMPORARY TABLE temp_a AS SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE = '64' AND PROBLEM_BATCH_MONTH = '2025-10'; -- 创建临时表存储第二个子查询的结果 CREATE TEMPORARY TABLE temp_b AS SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE != '64' AND PROBLEM_BATCH_MONTH = '2025-10'; -- 执行主查询 SELECT a.id FROM temp_a a LEFT JOIN temp_b b ON a.CERT_NUM_CODE LIKE '%' || b.CERT_NUM_CODE || '%' WHERE b.ID IS NOT NULL; -- 删除临时表 DROP TEMPORARY TABLE IF EXISTS temp_a; DROP TEMPORARY TABLE IF EXISTS temp_b; ``` ### 4. 分析查询执行计划 使用数据库的查询分析工具(如 MySQL 的 `EXPLAIN` 语句)来查看查询的执行计划,找出可能存在的性能瓶颈。 ```sql EXPLAIN SELECT a.id FROM (SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE = '64' AND PROBLEM_BATCH_MONTH = '2025-10') a LEFT JOIN (SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE != '64' AND PROBLEM_BATCH_MONTH = '2025-10') b ON a.CERT_NUM_CODE LIKE '%' || b.CERT_NUM_CODE || '%' WHERE b.ID IS NOT NULL; ``` ### 优化后的完整 SQL 示例 ```sql -- 创建索引 CREATE INDEX idx_wi_problem_handle_info ON WI_PROBLEM_HANDLE_INFO (PROBLEM_TYPE, VIOLATION_TYPE, PROBLEM_BATCH_MONTH, CERT_NUM_CODE); -- 创建临时表存储第一个子查询的结果 CREATE TEMPORARY TABLE temp_a AS SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE = '64' AND PROBLEM_BATCH_MONTH = '2025-10'; -- 创建临时表存储第二个子查询的结果 CREATE TEMPORARY TABLE temp_b AS SELECT CERT_NUM_CODE, id FROM WI_PROBLEM_HANDLE_INFO WHERE PROBLEM_TYPE = '6' AND VIOLATION_TYPE != '64' AND PROBLEM_BATCH_MONTH = '2025-10'; -- 执行主查询 SELECT a.id FROM temp_a a LEFT JOIN temp_b b ON a.CERT_NUM_CODE LIKE '%' || b.CERT_NUM_CODE || '%' WHERE b.ID IS NOT NULL; -- 删除临时表 DROP TEMPORARY TABLE IF EXISTS temp_a; DROP TEMPORARY TABLE IF EXISTS temp_b; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值