索引+视图+数据库设计

一、索引

        索引在数据库表上的字段上添加,为了提高查询效率。可以一个字段或多个字段联合添加索引。索引是为了缩小扫描范围存在的一种机制。

        如果字段上没有索引,mysql在查找一个字段时会进行全扫描,效率较低。

Notations:

(1)实际中汉语字典的目录是排序的,因为经过排序才会有区间查找,缩小扫描范围。在mysql中索引也需要排序,其数据结构是Binary Tree。

(2)在任何数据库中,任何一张表的任何一个记录,在硬盘上都有一个硬盘的存储编号。

(3)mysql中的主键字段和添加了unique的字段都有自动创建的索引。

(4)索引是一个单独的对象,不同的引擎中以不同形式存在。在myisam中,其存储在一个.MYI文件中。innodb中存在tablespace中。在memory中存在内存中。但无论什么方式,索引都是以数的形式存在的。

1.1 索引实现原理

        例如idIndex是id字段的索引对象,如果执行下列查询:

                select name from user where id=101;

        mysql注意到id字段有索引对象,然后通过索引idIndex定位到101(索引对象是以B-Tree存储的,可以缩小查找范围)。然后找到101的物理编号,马上进行转换:

                select name from user where 物理编号=xxx;

          考虑加索引的情况:

                (1)数据量大;(2)字段经常出现在where之后;(3)不经常被DML语句操作(操作之后,索引需要重新排序)。

Notations:索引不建议添加太多,需要维护。

1.2 索引的创建和删除

        添加索引:

                create index user user_index on user(id);

                create index user user_index on user(id,name);

//给user表的id字段添加user_index索引和复合索引。

        删除索引:

                drop index user_index on user;

        查看一个字段是否使用了索引:

                explain 查询语句;

 //没有索引的字段type为ALL,有的是ref

1.3 索引的失效

        索引失效的情况:

                (1)如带有like的模糊查询语句,如果查询内容是%开头的匹配语句,索引会失效。

                        所以避免使用这种语句是一种优化策略。

                  (2)使用or的时候两个字段都必须有索引,索引才不会失效。

                          少用or也是一种优化策略。

               (3)使用复合索引的时候,没有使用左侧的列查找。

                (4)在where列中,索引列参加了数学运算。

                (5)在where列中使用了函数。

1.4 索引的分类

        对数据库进行优化时优先考虑的就是索引,其分类有:单一索引(一个字段上加索引)、复合索引(两个或更多添加索引)、主键索引(主键上加索引)、唯一性索引(unique修饰的字段上添加索引)等。

        唯一性不强的字段上添加索引用处不大,会产生大量的重复数据。

二、视图

        view:站在不同的角度看待同一份数据。创建视图对象:

        create view user_view as select * from user;

Notations:as后面只能是DQL语句

        删除视图:

        drop view user_view;

        作用:修改视图会影响到原表的数据。将操作原表的语句中的表名直接换成视图名,会影响到原表。通过视图修改原表的数据:

        update user_view set userPassword='7654321' where id=12;

        在实际开发中,视图用于简化mysql语句。有的DQL语句很长,如果需要在多个位置使用,可以使用视图,简化语句。视图是存在硬盘上而不是内存的,也不会消失。

三、DBA常用命令

        创建用户:create user jk identified by '123456';

        主要掌握数据的导入导出。

        在windows 的dos窗口中执行:

                mysqldump 数据库名>导出文件路径 -u用户名 -p密码

        删除数据库:drop database 数据库名

        导入数据库需要先登录mysql,再创建数据库:create database 数据库名;

        再将数据导入数据库:                

                source 路径名;

四,数据库设计三范式

        第一范式:每张表必须有主键,每个字段具有原子性不可再分。

        第二范式:建立在第一范式的基础上,要求所有非主键字段依赖于主键,不产生部分依赖

        一般有复合主键的表都有部分依赖。

Notations:如果一张表是两个字段有多对多关系,为了满足第二范式,需要设计三张表,其中关系表有两个外键。

        第三范式:建立在第二范式的基础上,要求所有非主键字段直接依赖于主键,不产生传递依赖。

Notations:如果一张表两个字段有一对多的关系,为了满足第三范式,分成两张表,多出来的表添加外键。

        不满足第三范式,如:某个字段不直接依赖于主键依赖,而是直接依赖于另一个直接依赖于主键的字段。

        按照三范式设计数据库表,可以避免数据冗余,节省空间。

总结:一对多,两张表,多的表加外键;

            多对多,三张表,关系表两外键;

            一对一,两张表,外键唯一(unique);

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值