您的位置:  首页 > 技术杂谈 > 正文

SQL经典练习题(下)

2022-10-17 10:00 https://my.oschina.net/gaussdb/blog/5584840 Gauss松鼠会 次阅读 条评论

目录

一、SQL优化建议

1.数据库表设计

2.sql编写

3.中文处理

4.其他

二、学习平台(推荐)

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

2、SQL边学边练

一、SQL优化建议 为什么需要进行SQL优化?

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

1.数据库表设计 1)选择合适的数据类型

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

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

经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 WHERE子句的过滤条件字段上(尤其是范围条件)。 在经常出现在ORDER BY、GROUP BY和DISTINCT后的字段。 2.sql编写 使用limit对查询结果的记录进行限定 避免select *,将需要查找的字段列出来 使用连接(join)来代替子查询 拆分大的delete或insert语句 可通过开启慢查询日志来找出较慢的SQL 不做列运算:SELECT id WHERE age + 1 = 10,任何对列的操作都将导致表扫描, sql语句尽可能简单:一条sql只能在一个cpu运算;大语句拆小语句,减少锁时间; OR改写成IN:OR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内 不用函数和触发器,在应用程序实现 避免%xxx式查询 使用同类型进行比较 尽量避免在WHERE子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描 对于连续数值,使用BETWEEN不用IN: 列表数据不要拿全表,要使用LIMIT来分页,每页数量也不要太大 3.中文处理 openGauss数据库虽然支持定义中文表、字段名,但是不建议使用中文(sql server也支持中文)。

中文场景:

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

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

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

缺点:

1、编写时中文的全角半角等切换太麻烦,很容易出错。 2、中文储存与英文储存有差异,一些系统视图中可能会有一些性能或者维护上的影响。 3、兼容性差,如多语言环境下、多种数据库情况下,兼容性差等。 4.其他 合理使用"分区、分表等,根据实际情况结合数据库自身技术进行。 从业务角度出发给数据库“瘦身”,如分析并下线没有实际业务意义的job;归档历史数据等。 二、学习平台(推荐) SQL 的学习是基于数据库而言的,针对不同的数据库,如hivesql、mysql、sqlserver、oracle等,除了拥有自己的私有的扩展外, 大部分都是符合SQL的标准。如下是一些SQL学习的平台和资料,建议收藏。

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

1、SQL语法手册,随用随查 1)openGauss 3.0版本, 开发者指南-SQL参考

2)SQL在线教程

3)SQL 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

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

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接