数据库Mysql其他细节点

目录

什么是视图?以及视图的使用场景有哪些?

使用JDBC连接数据库

preparedStatement和statement的区别

在数据库中查询语句速度很慢,如何优化?

union和union all有什么不同?union和union all有什么不同?

Limit的优化

如何设计一个论坛表


什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

1.只暴露部分字段给访问者,所以就建一个虚表,就是视图。

2.查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异  

使用JDBC连接数据库

preparedStatement和statement的区别

说一下preparedStatement和statement的区别与联系:在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。PreparedStatement 接口继承 Statement ,PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于 Statement 对象。 Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句

select colume from table where colume=1;select colume from table where colume=2; 会生成两个执行计划 一千个查询就生成一千个执行计划! PreparedStatement用于使用绑定变量重用执行计划 select colume from table where colume=:x; 通过set不同数据只需要生成一次执行计划,可以重用。

并且PreparedStatement可以防止SQL攻击

在数据库中查询语句速度很慢,如何优化?

1.建索引

2.减少表之间的关联

3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面

4.简化查询字段,没用的字段不要,以及对返回结果的控制,尽量返回少量数据

5.尽量用PreparedStatement来查询,不要用Statement

union和union all有什么不同?union和union all有什么不同?

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。 UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

Limit的优化

    在Limit的偏移量offset上,比如limit 100000,10虽然最后只返回10条数据,但是偏移量却高达100000,数据库的操作其实是拿到100010数据,然后返回最后10条。

 

    那么解决思路就是,我能不能跳过100000条数据然后读取10条,而不是读取100010条数据然后返回10条数据。(案例中出发于无法直接推算出第100000条数据的id)

    原SQL语句:select * from mytbl order by id limit 100000,10;

    改进后的SQL语句如下:

        select * from mytbl where id >= (select id from mytbl order by id limit 10000,1) limit 10;

注:假设id是主键索引,那么里层走的是索引,外层也是走的索引,所以性能大大提高

如何设计一个论坛表

存在三个关系,分别是:

用户--主题帖:一个用户可以发0个或多个帖子,一个帖子对应一个用户(一对多关系),

主题帖—评论帖:一个主题有0个或多个评论帖子,一个评论帖子对应一个主题(一对多关系);

用户—评论贴:一个用户可以评0个或多个帖,一个帖子对应一个用户(一对多关系)。

 

对三个关系不应该分别建表,而是把用户的id作为主题表和评论表的外键,把主题贴id作为回帖表的外键。

 

用户表

字段名

类型

缺省值

中文含义

约束

备注

id

Int

 

用户编号

PRI

Auto_increment

Name

Varchar(30)

 

用户名

   

Password

Varchar(20)

 

密码

 

 

Email

Varchar(50)

 

邮箱

   

Phone

Varchar(30)

 

手机

   

Addr

Varchar(200)

 

地址

   

Role

int(1)

 

用户角色

 

 

 

 

帖子表:检索userID=某个用户id时的帖子信息

字段名

类型

缺省值

中文含义

约束

备注

id

Int

 

贴编号

PRI

Auto_increment

Title

Varchar(200)

 

发帖标题

   

Content

Text

 

发帖内容

   

UserID

Int

 

用户编号

 

外键

 

 

评论表:检索mainId=某个帖子ID时的评论信息。查询子评论:检索parentID=id

字段名

类型

缺省值

中文含义

约束

备注

id

Int

 

贴编号

PRI

Auto_increment

Title

Varchar(200)

 

发帖标题

   

Content

Text

 

发帖内容

   

UserID

Int

 

用户编号

 

外键

FatherID

Int

 

父编号

   

MainID

Int

 

主题帖编号

 

外键

 

参考链接:http://blog.sina.com.cn/s/blog_542a862901000cbq.html

 

猜你喜欢

转载自blog.csdn.net/qq_35642036/article/details/82820294