2021数据库考试题及答案 mysql题目和详细答案(12)


31.分库分表之后,id 主键如何处理?因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要?个全局唯?的 id来?持 。
?成全局 id 有下?这?种?式:
UUID:不适合作为主键,因为太?了,并且?序不可读,查询效率低 。?较适合?于?成唯?的 名字的标示?如?件的名字 。
数据库?增 id : 两台数据库分别设置不同步?,?成不重复ID的策略来实现?可? 。这种?式?成的 id 有序,但是需要独?部署数据库实例,成本?,还会有性能瓶颈 。
利? redis ?成 id : 性能?较好,灵活?便,不依赖于数据库 。但是,引?了新的组件造成系统更加复杂,可?性降低,编码更加复杂,增加了系统成本 。
Twitter**的snowflake算法** :Github 地址:https://github.com/twitter-archive/snowflake 。
美团的Leaf分布式**ID?成系统** :Leaf 是美团开源的分布式ID?成器,能保证全局唯?性、趋势递增、单调递增、信息安全,??也提到了?种分布式?案的对?,但也需要依赖关系数据库、Zookeeper等中间件 。感觉还不错 。美团技术团队的?篇?章:https://tech.meituan.com/2017/04/21/mt-leaf.html。
32.?条SQL语句执?得很慢的原因有哪些?大多数情况下很正常,偶尔很慢,则有如下原因(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘 。(2)、执行的时候,遇到锁,如表锁、行锁 。这条 SQL 语句一直执行的很慢,则有如下原因 。(1)、没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引 。(2)、数据库选错了索引 。33.聊聊存储过程一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它 。存储过 程是数据库中的一个重要对象 。
存储过程优化思路:
尽量利用一些sql 语句来替代一些小循环,例如聚合函数,求平均函数等 。中间结果存放于临时表,加索引 。少使用游标 。sql 是个集合语言,对于集合运算具有较高性能 。而 cursors 是过程运算 。比如对一个 100 万行的数据进行查询 。游标需要读表 100 万次,而不使用游标则只需要少量几次读取 。事务越短越好 。sqlserver 支持并发操作 。如果事务过多过长,或者隔离级别过高,都会造成并发操作的阻塞,死锁 。导致查询极慢,cpu 占用率极地 。使用try-catch 处理错误异常 。查找语句尽量不要放在循环内 。34.mysql里记录货币用什么字段类型好?NUMERIC和DECIMAL类型被Mysql实现为同样的类型,这在SQL92标准允许 。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据 。
当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定 。例如:salary DECIMAL(9,2)在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数 。因此,在这种情况下,能被存储在salary列中的值的范围是从-9999999.99到9999999.99 。在ANSI/ISO SQL92中,句法DECIMAL(p)等价于DECIMAL(p,0) 。同样,句法DECIMAL等价于DECIMAL(p,0),这里实现被允许决定值p 。
Mysql当前不支持DECIMAL/NUMERIC数据类型的这些变种形式的任一种 。这一般说来不是一个严重的问题,因为这些类型的主要益处得自于明显地控制精度和规模的能力 。DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度 。一个字符用于值的每一位、小数点(如果scale>0)和“-”符号(对于负值) 。如果scale是0,DECIMAL和NUMERIC值不包含小数点或小数部分 。DECIMAL和NUMERIC值得最大的范围与DOUBLE一样,但是对于一个给定的DECIMAL或NUMERIC列,实际的范围可由制由给定列的precision或scale限制 。当这样的列赋给了小数点后面的位超过指定scale所允许的位的值,该值根据scale四舍五入 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: