JAVA学习第23天;视图;优化;三范式;JDBC

JAVA学习第23天;视图;优化;三范式;JDBC,第1张

JAVA学习第23天;视图;优化;三范式;JDBC 视图 view

视图:可视化的表,是指可以把sql执行的结果,直接缓存到了视图中,下次如果还要使用相同的sql语句,直接调用视图就可.
视图 *** 作步骤:第一步创建视图 第二部使用步骤
创建视图的格式: create view 视图名 as 查询的sql语句
视图:就是一张特殊的表 用来缓存查询的结果
好处是提高了SQL的复用率,简化了我们重写sql语句,屏蔽了真实的业务表的复杂性,被所有人共享
坏处:视图中存了大量重复的数据是占内存的,无法被优化,当数据更新时,视图也需要更新,麻烦.

CREATE VIEW  empview AS  
   SELECt*FROM  emp WHERe ename LIKE  '%a%'      //将sql语句SELECt*FROM  emp WHERe ename LIKE  '%a%'  创建视图
 SELECt*FROM empview     //使用刚创建的视图

优化
EXPLAIN SELECt* FROM students  WHERe sname LIKE  "李%"   #索引生效    高效方式可以生效
EXPLAIN SELECt* FROM students  WHERe sname LIKE  '%李%'  #索引失效  
EXPLAIN SELECt* FROM students  WHERe sname LIKE  "%李"   #索引失效
EXPLAIN SELECt*FROM  students  WHERe sno=103   #失效   因为字段类型不匹配
EXPLAIN SELECt*FROM  students  WHERe sno='103' #生效 因为字段类型是varchar 

1.查询语句时尽量不要使用*,使用字段名查询,可以节省资源.
2.查询条件中尽量使用and,不用or,尽量把查询条件的范围控制到最小,or是满足两个查询中的一条查询语句就会
3.查询条件中应该避免使用!=,因为‘!=’ 将不使用索引。记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
4. 表设计时,尽量使用varchar替换char,在mysql中char长度不变的,如设置一个长度为10的字段,插入的长度小于定义长度时,会用空格填充,和varchar是长度可变的,小于定义长度时,还是按实际长度存储.
5. 单表中索引的数量控制在5个以下,在模糊查询中,只有使用 ‘x%’ 会让索引生效
6. 关联的表个数越多,编译的时间和开销也就越大,每次关联内存中都生成一个临时表,应该把连接表拆开成较小的几个执行,可读性更高
如果一定需要连接很多表才能得到数据,那么意味着这是个糟糕的设计了,阿里规范中,建议多表联查三张表以下
7.多表查询可以使用三种方式,笛卡尔积,连接查询 inner join 内连接 left join 左连接 right join 右连接,子查询,其中连接查询相对高效,最高效的是inner join 内连接.

扩展:三范式

是指数据库设计人员,必须要遵守的规范
常见的范式有三范式:1nf 2nf 3nf
好处是可以减少冗余

第一范式:表中的字段值不会在分割,可以理解为一个字段只存储一段信息
第二范式:2NF, 是指 遵循了1NF的基础上,再遵循2NF.表中的非主属性要围绕着主属性运行,可以理解为表中任意一个字段,都依赖于表中同一个字段.
第三范式:3NF, 是指 遵循了前两范式
是指 字段之间的依赖性是直接的,而不是还要间接的产生依赖,导致查询关闭变得复杂,结论是一张表最多只存2层同类型信息

JDBC 全称 java databases connectivity

java 和 数据库是不相关的,但是通过JDBC,可以利用一段java程序来 *** 作数据库,它是一套标准,一套准则,本质上是一个jar包(java工具类)

public class Test33 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        String  url="jdbc:mysql://localhost:3306/cgb211101";
        Connection c = DriverManager.getConnection(url, "root", "root");
        //获取传输器
        Statement s = c.createStatement();
        //保存执行sql语句 交给结果集ResultSet r
        ResultSet r = s.executeQuery("select*from dept");//用来执行sql语句
        System.out.println("java程序与数据库连接成功");
        //处理数据库返回来的结果
        while(r.next()){
            int deptno = r.getInt(1);//获取参数  第一列的整数值
            //todd  //获取后面两列的值
            String dname = r.getString(2); //获取第二列的值
            String loc = r.getString(3);//获取第三列的值
            System.out.println(deptno+"."+dname+loc);

        }
        //关闭资源
        c.close();
        s.close();
        r.close();


    }
}
 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5695523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存