数据库常见面试题

1 mysq理数据库有哪些数据类型

 

    1 数值类型

      TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示 1 字节、2 字节、3 字节、4        字节、8 字节的整数类型。   

     2字符串类型    

       包括 VARCHAR、CHAR、TEXT、BLOB。

       注意:VARCHAR(n) 和 CHAR(n) 中的 n 并不代表字节个数,而是代表字符的个数。

      一个英文字符是一个字节,一个汉字是三个字节

     3 时间和日期类型       

      常用于表示日期和时间类型为 DATETIME、DATE 和 TIMESTAMP。

     尽量使用 TIMESTAMP,空间效率高于 DATETIME。
2 varchar和char的区别

     char是定长的,vachar是可变的,但是效率char比较高

    char  一个字母一个字节  一个汉字2个字节  varchar  均是两个字节

3 索引

 1索引的设计原则:

  最左原则

   命名尽量短小

   在经常使用的列上建立索引(group by  order by distinct),查询、排序、分组、联合查询的列     上建立

2 索引的优缺点

优点:

  通过唯一索引保证了每行数据的唯一性,

  加快了查询速度

  加速了表与表之间的连接

缺点:

   创建和维护索引消耗时间而且索引占据 了一定的物理空间

   每次修改和删除都要维护索引,降低了效率

3 不宜使用索引的情况

数据量比较小的,小表不建议建立索引

修改更新频繁的字段

区别度低的比如性别字段

   

4 索引失效的情况

    like语句,包含了%且放在了前边,在后边可以命中索引

   索引列是字符串类型 查询条件条件没有用‘’ 默认为了整型数据导致失效

    or语句前后的字段没有同时建立索引

    索隐列没有not null约束

    对索引列进行了数据运算,使用!=  <> in   not in 

    where中索引列使用了计算或者函数

4 事务

   1事务的四大特性

    原子性 事务是最小的执行单位,不允许分割

    一致性  事务是从 一个一致状态到另外一个一致状态的过程,事务执行前后数据保持一致

    持久性  对数据库的改变是持久的

    隔离性  相互隔离 

  2 事务的并发问题-脏读、幻读、不可重复读

   脏读:事务中读取了另外一个事务未提交的数据

   幻读:短时间内多次读取同意数据返回的值不同

       

3事务的隔离级别

read uncommitted  

read  committed

repeatable read

serializable

4 事务的传播特性

事务是可以传播的,一个事务中的方法调用到另外一个放大是可以传播到另外一个方法的

required  需要事务(默认的),如果调用方法存在事务则加入,不存在则新建一个事务

surrport是 支持事务,如过调用方法存在事务则加入,不存在则以非事务的方法执行

mandory   需要事务,如果调用方法存在事务则加入,不存在则抛出异常

required_new  ,如果调用方法存在事务,则挂起,自己新建一个事务执行

not-supported    不支持事务,如果调用方法存在事务则挂起,

never         不支持事务,如果调用方法存在事务则抛出异常

5  in 和exsits的去呗

in适合内表比外表数据量小的情况下,exisits 适合内表比外表数据量大的情况

6 drop  truncate 和delete的区别

从执行速度上讲:drop > truncate >> DELETE。

区别           Delete        Truncate    Drop
SQL类型    属于DML    属于DDL    属于DDL
支持回滚    支持           不支持    不支持
删除内容    表结构还在,删除表的全部或部分数据  ; 表结构还在,删除表中所有数据 ;   从数据库中删除表的所有数据,包括索引和权限
执行速度    速度慢,需要逐行删除    速度快    速度最快
 

7 如何判断sql是否使用了索引

explain  加上要测试的sql语句

 type反应查询语句的性能,

type 结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般情况下查询至少达到 range 级别,最好能达到 ref 级别,否则就可能出现性能问题。

2) possible_keys: SQL查询时可能用到的索引(也就是表中所有的索引)。
可以看到,没加索引时,possible_keys 的值为 NULL,加了索引后的值为 address,即用到了索引address(索引默认为(column_list)中的第一个列的名字).


3) key 显示SQL实际决定查询结果使用的键(索引)。如果没有使用索引,值为NULL
可以看到,没加索引时,key 的值为 NULL,加了索引后的值为 address,即决定查询结果用到了索引address


4) rows 显示MySQL认为它执行查询时必须检查的行数
可以看到,没加索引时,rows 的值为17,即数据表student中所有数据,说明没加索引时的SQL查询是全表扫描;

加了索引后,rows 的值为6,数据库表中address以“北京市”开头的一共也就6条,SQL在执行查询操作时,一共也检查了6行,不必进行全表扫描查询,可以很容易得出结论:加索引的SQL查询性能远高于不加索引的情况。

8 函数和触发器

  java调用函数

9大数据量插入sql的时候

1 批处理,批量提交sql可以减少和数据库的交互次数,java中可以用statement或者preparedstatement 的addbatch方法添加多个语句后一次性通过execteBath()当打提交处理的sql语句

注意:要设置批处理的大小和等待时间

批处理的大小指的是一次性执行多少个插入sql,太小的话和数据库交互频率会很高,太大或者太小都会导致数据库内存占用很高,一般是1000-5000

等待时间指的是批处理质检的操作等待的时间

2 索引,在大量数据插入之前可以先删除索引后在加上

3 使用数据库连接池可以减少数据库连接的建立和关闭提供性能

4 数据库参数调整,增加mysql的缓冲区的大小,配置高性能的磁盘


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值