navicat 为表添加索引
分析常用的查询场景,为字段添加索引,增加查询速度。
可以添加单列索引,可以添加联合索引。
右键,设计表中可以查看和添加修改索引!
索引一定要根据常用的查询场景进行添加!
写了sql语句测试了一下,确实使用了索引!
可以通过名称来判断使用了什么索引!
帮与跟,让我感受到了索引的使用方法。
navicat软件还是很不错的!
我喜欢!
再谈优化查询,每一行代码,都能优化!每一个查询都能优化!写完接口之后,可以检查一下,哪里执行效率低了。数据少还看不出来,数据量一多。不好的设计就会展现的淋漓尽致!
问题1:mysql索引类型normal,unique,full text的区别是什么?
normal:表示普通索引
unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique
full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。
索引的方式:
1、BTREE(B树(可以是多叉树)) {主流使用}
2、HASH(key,value) 这种方式对范围查询支持得不是很好
问题2:在实际操作过程中,应该选取表中哪些字段作为索引?
为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:
1.选择唯一性索引
2.为经常需要排序、分组和联合操作的字段建立索引
3.为常作为查询条件的字段建立索引
4.限制索引的数目
5.尽量使用数据量少的索引
6.尽量使用前缀来索引
7.删除不再使用或者很少使用的索引
9. 经常更新修改的字段不要建立索引(针对mysql说,因为字段更改同时索引就要重新建立,排序,而Orcale好像是有这样的机制字段值更改了,它不立刻建立索引,排序索引,而是根据更改个数,时间段去做平衡索引这件事的)
10、不推荐在同一列建多个索引
使用Navicat for mysql添加外键约束
先介绍一下基本情况:
现在有两个表一张是t_blog表(博客表),一张是t_blogType表(博客类别)
现在我想把t_blog表中的typeID属性设置为外键,关联t_blogType表中的id属性。
1,右键t_blog表,设计表,选择外键属性
2,然后会出现一个设置外键的界面,一共有七列。简单介绍一下这几列的意思:
“名”: 可以不填,你一会保存成功系统会自动生成。
“栏位”:就是你要把哪个键设置为外键。这里选择‘typeId’
“参考数据库”: 外键关联的数据库。
“参考表”: 关联的表 这里是t_blogType表
“参考栏位”:关联的的字段,这里是id
“删除时":就是删除的时候选择的动作。这里我的选择是setNull,意思就是当关联的表删除以后,t_blog->typeID字段会设置为null。
“ 更新时”:就是更新的时候选择的动作。这里我的选择是CASCADE,意思就是当关联的表更新以后,t_blog->typeID字段会设置为级联更新。
MySQL外键约束删除时和更新时各取值的含义
1、准备测试工作
创建2个表,分别为studnet 学生表和monitor 班长表
学生表有学号和姓名2个属性;
班长表有班级和学号2个属性。
班长表设置外键学号,连接主表学生表的学号属性。
并插入数据如图:
2、删除时属性,可能取值如上图为:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。
当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
3、更新时属性,可能取值如上图为:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。
当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
更新时同理!!!不测试了!
4、总结
外键的使用对于减少数据库冗余性,以及保证数据完整性和一致性有很大作用。
另外注意,如果两张表之间存在外键关系,则MySQL不能直接删除表(Drop Table),而应该先删除外键,之后才可以删除。
所以一般默认就好(RESTRICT)。
如何使用Navicat为数据库表建立触发器
方法/步骤
说一下,触发器在本表中创建,但是只能在另一张表进行操作。
示例如下:
在user下创建的触发器。只能对user1进行操作