栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

炫“库”行动-人大金仓有奖征文-金仓库分析型数据库

炫“库”行动-人大金仓有奖征文-金仓库分析型数据库

金仓库活动

文章目录
    • 1.你有哪些数据库sql优化经验?
    • 2.使用Redis有什么好处?
    • 3.Redis集群如何选择数据库?
    • 4.MongoDB的使用场景?
    • 5 什么是MongoDB?
    • 6 实践出真理,leetCode刷mysql题目的的总结。
    • LeetCode题目1
    • leetcode题目二使用位运算可以节约时间

1.你有哪些数据库sql优化经验?
  1. 使用PrepareStatement语句,这个是经过预编译处理过的,比Statement的的速度要快。
  2. 如果数据的内容少,或者是有限的固定范围,可以使用Enum类型,而不是varchar类型
  3. 可以通过分布式的数据库系统增加数据库的性能,提高数据库的速度
  4. 可以通过不同的连接池来进行访问数据库的访问,比如Druid,HikariCP.HikariCp号称性能最好的连接池,这个是为什么?
  5. 使用Union进行连表查询比Union All进行连表查询可以大大提高性能,
    Union好处:
6. 可以进行排序功能
7. 可以进行去除重复
  1. 可以使用单表查询的尽量使用单表,可以大大的提高查询的的速度,尽量少使用子查询
  2. select * from tb group by name order by null; group by后面已经默认进行了排序,你可以它不用排序,进行提高相关的性能。
    10.分页查询的limit,我们会查询也很多的数据以后再摒弃不符合条例的数据,这样会大大的降低查询的效率。我们可以通过查询索引进行,或者通过改变它的查询的位置。
SELECt * FROM user u 
LEFT JOIN (SELECt id FROM user LIMIT 1000,10) AS d ON d.id=u.id
SELECt * FROM user WHERe id > 1000 LIMIT 10
  1. 使用Truncate代替delete操作
    当你真的确定删除这个表中的数据的时候使用 truncate删除表中的数据使用的资源很少,比delete使用的少很多,但是数据不可以被恢复。
  2. 不要在where子句中对数据库的字段进行null的判断,或者使用!=,这样会使mysql放弃索引,进行全表的扫描,效率低,in和not in 也要慎用,可以用between代替
  3. 索引不是越多越好,我们需要建立适当的索引,它会影响insert和update的执行的效率,一张表的索引最好不要超过6个。
  4. 避免频繁的创建和删除临时表,可以减少系统表的资源的消耗。
  5. 事务的操作不要过多,这样可以提高系统的并发能力。
    用合适的方法生成相应的索引
索引可以用UUID.random().toString()进行生成,
和使用时间戳+随机数进行生成,这样的索引可以有唯一的标识。
使用雪花算法生成相应的id
  1. 刚开始的索引长度不要太长,可能会引起查询的效率的降低。可以使用subString()截取其中的一段就好。
  2. 数据库查询可以自定义变量来进行查询,力扣上面的题目很多老师自定义变量。
  3. 使用一些nosql数据库来为Mysql数据库进行减轻负担,比如查询放在缓存中,直接通过redis进行查询,它是单线程的,又是通过内存进行访问可以很大的提高效率,通过MongoDB来解决操作频繁的海量的数据,比如吐槽,评论的数据,不是特别重要。
  4. 数据库的表可以在需要建立外键约束。
  5. 有时候可以使用位运算来提高sql语句的运行速度问题。
2.使用Redis有什么好处?
  1. redis是依靠单线程来运行,这样性能更加的突出
  2. 可以进行持久化操作(AOF(日志文件),RDB(内存快照))
  3. 数据存储在内存中,速度快,类似于HashMap的查询,时间复杂度为o(1)
  4. 支持丰富的数据类型,String,set,sorted set,hash,list
  5. 支持事务操作,具有事务的ACID属性,要么一起改变,要么不发生改变
  6. 丰富的特性:可以为mysql数据库分担很多,用于缓存,消息,队列,计数器/排行榜,发布订阅点赞等等。
  7. 支持数据备份,通过master-slave进行数据的备份
3.Redis集群如何选择数据库?

目前无法做数据库选择,默认使用0数据库。

4.MongoDB的使用场景?
  1. 数据量大
  2. 写入操作频繁
  3. 价值较低
  4. 比如吐槽,评论可以使用这个数据库
5 什么是MongoDB?

是最像sql的数据库的nosql数据库,最大特点,支持的查询语言非常强大,语法类似于面向对象的查询语言,是一个跨平台,面向文档的数据库,是当前的Nosql数据库8产品中最热门的一种。是Nosql数据库中功能最丰富的。支持的数据库结构松散,类似 于Json的Bson格式,可以存储复杂的数据类型。

6 实践出真理,leetCode刷mysql题目的的总结。 LeetCode题目1

有一个courses 表 ,有: student (学生) 和 class (课程)。

请列出所有超过或等于5名学生的课。

例如,表:

±--------±-----------+
| student | class |
±--------±-----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
±--------±-----------+
应该输出:

±--------+
| class |
±--------+
| Math |
±--------+

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/classes-more-than-5-students
方法一:可以对课程进行分组,然后统计每个课程的学生的数量

 
#  执行用时:
# 281 ms
# , 在所有 MySQL 提交中击败了
# 69.81%
的用户
 select class from courses group by 
 class having count(distinct student)>=5;
# 执行用时:
# 285 ms
# , 在所有 MySQL 提交中击败了
# 58.01%
SELECt
    class
FROM
    (SELECt
        class, COUNT(DISTINCT student) AS num
    FROM
        courses
    GROUP BY class) AS temp_table
WHERe
    num >= 5
;

可以看出使用临时表的效率一般会比单表操作低,建议多使用单表进行操作

leetcode题目二使用位运算可以节约时间

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

例如,下表 cinema:

±--------±----------±-------------±----------+
| id | movie | description | rating |
±--------±----------±-------------±----------+
| 1 | War | great 3D | 8.9 |
| 2 | Science | fiction | 8.5 |
| 3 | irish | boring | 6.2 |
| 4 | Ice song | Fantacy | 8.6 |
| 5 | House card| Interesting| 9.1 |
±--------±----------±-------------±----------+
对于上面的例子,则正确的输出是为:

±--------±----------±-------------±----------+
| id | movie | description | rating |
±--------±----------±-------------±----------+
| 5 | House card| Interesting| 9.1 |
| 1 | War | great 3D | 8.9 |
±--------±----------±-------------±----------+

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/not-boring-movies
普通的sql语句:

select *from cinema where description!='boring' and id%2!=0
order by rating desc;

使用位运算的sql语句:

# 210 ms
# , 在所有 MySQL 提交中击败了
# 77.53%
# 的用户
select id, movie, description, rating
from cinema
where description <> 'boring' and id & 1
order by rating desc;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号