1、请用SQL 语句实现如下功能:将表A备份为A_BAK,再将表A清空。

    1. # 复制表结构
    2. CREATE TABLE A_BAK LIKE A;
    3. # 将A表数据加载进A_BAK
    4. INSERT INTO A_BAK SELECT * FROM A;
    5. # 清空表A的数据
    6. TRUNCATE TABLE A;

    微信截图_20210410155000.png

    2、什么是SQL执行计划?SQL存储优化和查询优化,有哪些常用方法?
    执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。在MySQL使用 explain 关键字来查看SQL的执行计划。

    方法:1、EXPLAIN 2、区分in和exists 3、避免在where子句中对字段进行null值判断 4、in 和 not in 也要慎用,否则会导致全表扫描 5、避免在where子句中对字段进行表达式操作 6、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描 7、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描 8、避免隐式类型转换


    **
    3、数据库中有一个线上服务器访问日志的表SYS_LOG,表结构如下。写一个SQL 查询:11月9号下午14:00-15:00之间,访问/api/user/login接口的Top 10的 IP地址和访问次数

    1. # 查询:11月9号下午14:00-15:00之间,访问/api/user/login接口的Top 10的 IP地址和访问次数
    2. select 'IP',
    3. @i: = @i + 1 as i,
    4. @k: = (case when @count = a.sum_count then @k else @i end) as rank1,
    5. @count:= a.sum_count as 'count'
    6. from (select 'IP', count('IP') as 'sum_count'
    7. from SYS_LOG
    8. where 'URL' = '/api/user/login' and 'TIME' between '2017-11-09 14:00:00' and '2017-11-09 15:00:00'
    9. group by 'IP'
    10. order by 'sum_count' desc limit 0, 10) a
    11. ,
    12. (select @k: = 0, @i: = 0, @count: = 0) s;