SQL经典练习题(下)

目录

一、SQL优化建议

1.数据库表设计

2.sql编写

3.中文处理

4.其他

二、学习平台(推荐)

1、SQL语法手册,随用随查

2、SQL边学边练


一、SQL优化建议

为什么需要进行SQL优化?

在进行多表连接查询、子查询等操作的时候,由于写的SQL语句欠佳,导致的服务器执行时间太长,等待结果的时间太长。SQL的性能不仅仅需要对SQL语句本身进行,同时也要考虑在建库、建表、建索引等阶段进行。基于此,所以需要学习怎么优化SQL。

1.数据库表设计

1)选择合适的数据类型

  1. 使用可存下数据的最小的数据类型。
  2. 使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。
  3. 使用合理的字段属性长度,固定长度的表会更快。
  4. 尽可能使用not null定义字段。
  5. 尽量少用text,非用不可最好分表。

2)索引

索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:

  1. 经常执行查询的字段。
  2. 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。
  3. WHERE子句的过滤条件字段上(尤其是范围条件)。
  4. 在经常出现在ORDER BY、GROUP BY和DISTINCT后的字段。

2.sql编写

  1. 使用limit对查询结果的记录进行限定
  2. 避免select *,将需要查找的字段列出来
  3. 使用连接(join)来代替子查询
  4. 拆分大的delete或insert语句
  5. 可通过开启慢查询日志来找出较慢的SQL
  6. 不做列运算:SELECT id WHERE age + 1 = 10,任何对列的操作都将导致表扫描,
  7. sql语句尽可能简单:一条sql只能在一个cpu运算;大语句拆小语句,减少锁时间;
  8. OR改写成IN:OR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内
  9. 不用函数和触发器,在应用程序实现
  10. 避免%xxx式查询
  11. 使用同类型进行比较
  12. 尽量避免在WHERE子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  13. 对于连续数值,使用BETWEEN不用IN:
  14. 列表数据不要拿全表,要使用LIMIT来分页,每页数量也不要太大

3.中文处理

openGauss数据库虽然支持定义中文表、字段名,但是不建议使用中文(sql server也支持中文)。

中文场景:

  1. 1、国人的习惯,在不熟悉的领域(机械,医疗等专业)里,英文往往并不能准确的翻译,而使用拼音或缩写也不直观。
  2. 2、在简单的、快速开法的(低成本仅供演示的)项目中,往往对数据字典没什么特别的要求,也无需考虑稳定性、迁移性等。使用中文可以方便修改逻辑结构模型,方便SQL语句设计。
  3. 3、报表展示等
  4. 优点

1、不必考虑命名规范

2、很清晰的知道我们要操作的字段,看起来一目了然。(当然如果数据库被其他人进入也是一目了然,安全性差一点)。

3、页面显示的时候无需转换等。

缺点:

  1. 1、编写时中文的全角半角等切换太麻烦,很容易出错。
  2. 2、中文储存与英文储存有差异,一些系统视图中可能会有一些性能或者维护上的影响。
  3. 3、兼容性差,如多语言环境下、多种数据库情况下,兼容性差等。

4.其他

  1. 合理使用"分区、分表等,根据实际情况结合数据库自身技术进行。
  2. 从业务角度出发给数据库“瘦身”,如分析并下线没有实际业务意义的job;归档历史数据等。

二、学习平台(推荐)

SQL 的学习是基于数据库而言的,针对不同的数据库,如hivesql、mysql、sqlserver、oracle等,除了拥有自己的私有的扩展外, 大部分都是符合SQL的标准。如下是一些SQL学习的平台和资料建议收藏

本文是在openGauss数据库环境上运行的,且大多数sql题有多种写法,需要根据实际业务表的情况进行最优编写,大家练习的同时可以在openGauss数据库环境上测试同时欢迎经验分享 

1SQL语法手册,随用随查

1)openGauss 3.0版本, 开发者指南-SQL参考

2SQL在线教程 

3SQL Tutorial For Beginners | 1Keydata 

2、SQL边学边练

1)sqlzoo: SQLZOO 

2)CodeCademy: SQL Tutorial: Learn SQL For Free | Codecademy 

3)sqlbolt:SQLBolt - Learn SQL - Introduction to SQL 

4)w3school SQL 教程 

5)w3schools SQL Tutorial 

6)sqlteaching:SQL Teaching - The easiest tutorial to learn SQL

🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持! 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gauss松鼠会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值