mysqlsum计算效率很慢_MySQL,Oracle常见⾯试题
MySQL性能卓越服务稳定,开放源代码,安装使⽤简单,易于维护。Oracle是⼤型数据库,安全性好,性能⾼,适合⼤型应⽤。
1.MySQL的存储引擎InnoDB和MyISAM的区别?
InnoDB 引擎提供了对数据库事务的⽀持,并且提供了⾏级锁和外键的约束,它能处理⼤数据容量的数据库系统。但是不⽀持全⽂搜索,同时启动也⽐较慢,它是不会保存表的⾏数的。所以当进⾏ select count() from table 指令的时候,需要进⾏扫描全表获取数据量。由于锁的粒度⼩,写操作是不会锁定全表的。所以在并发度较⾼的场景下使⽤效率⽐较⾼。
MyISAM时引擎是MySQL 的默认引擎,不提供事务的⽀持,也不⽀持⾏级锁和外键。因此当执⾏插⼊和更新语句时,会锁定这个表,所以效率低。MyIASM 引擎保存了表的⾏数,当进⾏ select count() from table 语句时,可以直接的读取已经保存的值⽽不需要进⾏扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的⽀持的,使⽤MyISAM效率⾼。
2.MySQL和Oracle的区别?
1) MySQL是开源的项⽬,免费。中⼩企业⾸选MySQL,Oracle是Oracle公司推出的⼀款成熟的数据库
产品是闭源同时也是收费的。
javascript 教程 hooo2) SQL语法的不同,MySQL较为灵活,Oracle较为严格(具体就是单引号,分页的处理,主键的⾃动增长)
3)对于事务的⽀持,MySQL对于事务默认是不⽀持的,只有存储引擎InnoDB⽀持。⽽Oracle对于事务是完全⽀持。
4)并发性。MySql默认表级锁,Oracle⾏级锁,所以oracle并发⾏⾼很多。
3.char和varchar的区别?
char是⼀种固定长度的类型,varchar则是⼀种可变长度的类型。
char(M)类型的数据列⾥,每个值都占⽤M个字节,如果某个长度⼩于M,MySQL就会在它的右边⽤空格字符补⾜。在varchar(M)类型的数据列⾥,每个值只占⽤刚好够⽤的字节再加上⼀个⽤来记录其长度的字节(即总长度为L+1字节)。
varchar适合字符串列的最⼤长度⽐平均长度⼤很多 ,并且字符串很少被更新,容易产⽣存储碎⽚ 。
vue网络拓扑图插件
char适合存储具有固定长度(如⾝份证,⼿机号),长度⽐较短⼩的字符串,更适合经常更新的字符串。更新时不会出现页分裂情况,不容易产⽣存储碎⽚。
4. 如何选择建⽴索引的列?
(⼀)适合创建索引的列
1) 频繁搜索的列
2) 经常⽤作查询的列
3) 经常排序,分组的列
4) 经常⽤作连接的列(主键/外键)
(⼆)不适合创建索引
1) 仅包含⼏个不同值的列
2) 表中只有⼏⾏
5.MySQl如何进⾏⼤表优化?
1)限定表的扫描范围
2)读写分离,经典的数据库拆分⽅案,主库负责写,从库负责读。
3)垂直拆分,根据数据库⾥⾯数据表的相关性进⾏拆分。 例如,⽤户表中既有⽤户的登录信息⼜有⽤户的基本信息,可以将⽤户表拆分成两个单独的表,甚⾄放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分,把⼀张列⽐较多的表拆分为多张表。
4)⽔平分区,保持数据表结构不变,通过某种策略(⽇期范围,整数范围等)存储数据分⽚。这样每⼀⽚数据分散到不同的表或者库中,达到了分布式的⽬的。⽔平拆分可以⽀撑⾮常⼤的数据量。
6.数据库的乐观锁和悲观锁是什么?
mysql面试题sql确保在多个事务同时存取数据库中同⼀数据时不破坏事务的隔离性和统⼀性,乐观锁和悲观锁是并发控制主要采⽤的技术⼿段。
悲观锁:假定会发⽣并发冲突,屏蔽⼀切可能违反数据完整性的操作.在查询数据的时候就把事务锁起来,直到提交事务。实现⽅式:使⽤数据库中的锁机制。
执⾏select xxx for update操作时,数据会被锁定,只有执⾏commit或rollback才会释放。这种⽅式并发性很低。
乐观锁:假设不会发⽣并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的⽅式来进⾏锁定。实现⽅式:使⽤version版本或者时间戳.
(1)在数据查询的时候把整个数据都copy到应⽤中,在进⾏提交的时候⽐对当前数据库中的数据和开始的更新前取得的数据进⾏⽐较。如果没有变化,就表⽰没有冲突则可以提交事务,否则就是并发冲突(其他请求已经修改过数据),则不能提交,需要去⽤业务逻辑进⾏解决。
(2)在表中添加⼀个新的列,这个列采⽤timestamp型,存储数据最后更新的时间。这种Timestamp的数据精度在Oracle的时间类型中是最⾼的,精确到微秒。在更新提交的时候检查当前数据库中数据的时间戳和⾃⼰更新前取到的时间戳进⾏对⽐,如果⼀致则提交,否则就是版本冲突。
波尔图对马竞比赛7.  oralce中 rowid, rownum的定义
1)rowid和rownum都是伪列
2)rowid是物理地址,⽤于定位oracle中具体数据的物理存储位置
3)rownum则是sql的输出结果排序
8.MySQL数据库, 每页数据显⽰5⾏,显⽰Teacher表中第2页的数据的SQL语句
select * from Teacher  limit 5,5
9.使⽤⼀条SQL语句,删除表temp中的重复数据
Oracle语法:
delete from temp where id not in(select max(id) from temp group by name)
MySql语法:
delete from  temp where id
not in ( select * from
(select max(id)
from test group by name) a
谷歌电脑版官方下载)
10.学⽣成绩表如下:
姓名 课程 分数
张三 语⽂74
张三 数学85
张三物理 92
李四 语⽂79
李四 数学82
李四物理 95
使⽤⼀条SQL语句,得出如下结果
姓名语⽂数学物理
张三748592
李四798295
select name,max(case whencource =’语⽂’ then score else 0 end)  语⽂,
max(case when cource =’数学’ then score else 0 end) 数学,
max(case when cource =’英语’ then score else 0 end) 英语
from scores group by name
trimmean 函数11.⼀个叫department的表,⾥⾯只有⼀个字段name,⼀共有4条纪录,分别是a,b,c,d,对应四个球队,现在四个球队进⾏⽐赛,⽤⼀条sql 语句显⽰所有可能的⽐赛组合。
select a.name, b.name
from team a, team b
where a.name < b.name
12.甲、⼄、丙三⼈在玩牌,⼀共玩了⼀百盘,各盘的成绩都保存在Score表中。请⽤SQL语句查出三⼈各⾃的最⾼分在哪⼀局,输出局号和最⾼成绩。
字段名属性备注
ID Int(⾃增)局号
OptionA Int甲的成绩
OptionB Int⼄的成绩
OptionC Int丙的成绩
select ‘A’ as name,
max(OptionA) as maxScore  from score
union
select ‘B’, max(OptionB) from score
union
select ‘C’, max(OptionC) from score
13.表A有三个字段 ,结构如下
books a b
20011  1.1
20012  1.2
20013  1.3
20014  1.4
20021  1.1
20022  1.2
20023  1.3
20024  1.4
使⽤⼀条SQL语句,⽣成的结果如下图:
books a1a2a3a4 2001  1.1  1.2  1.3  1.4 2002  1.1  1.2  1.3  1.4 select  books,
sum(case when a=1 then b else 0 end) as a1,
sum(case when a=1 then b else 0 end) as a2,
sum(case when a=3 then b else 0 end) as a3,
sum(case when a=4 then b else 0 end) as a4
from    A  group by  books
14.员⼯表emp如下图
列出所有员⼯的姓名及其直接上级的姓名
分析:表⾃连接,为表起别名,关联 , t1 表模拟员⼯表 t2 表保存直接上级信息
ame 员⼯姓名, t2.ename 直接上级 from emp t1,emp t2
where t1.MGR = t2.empno
15.列出受雇⽇期早于其直接上级的所有员⼯
select t1.*,t2.hiredate from emp t1,emp t2 where t1.MGR = t2.empno
and t1.hiredate < t2.hiredate
16.将薪⽔最⾼的员⼯的薪⽔降30%
Oracle语法:
update emp set sal = sal*0.7 where sal = (select max(sal) from emp)
MySQL语法:
update emp set sal = sal*0.7 where sal = (select t.maxsal  from
(select    max(sal) maxsal from emp) t)
注意:Mysql 规范要求修改或者删除 表中记录,不允许在⼦查询中查询相同表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。