发表于: 2017-04-21 23:10:28
2 1333
完成:给姓名、qq建索引,回答“深度思考”中的问题。
明天计划的任务:学习Maven。
遇到的问题:数据类型选择不对引起的一些问题,如导出导入不方便;对于10条数据来说,索引建了和没建似乎差别不大。
收获:数据类型、索引对于性能的影响,选择数据类型要考虑占用的空间、检索时的性能。
--------------------------------------
笔记:
mysql> create index stu_idx on student(name,qq);
Query OK, 0 rows affected (0.49 sec)
Records: 0 Duplicates: 0 Warnings: 0
》》》》
5.为什么DB的设计中要使用Long来替换掉Date类型?
答:date处理起来较复杂,况且操作系统用的时间好像也是用某一年开始的秒数莱记录时间,可以节省存储空间吧。
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
答:数据量大的时候要是超出了ID的最大值会溢出,数据快速增加的时候不使用自增ID。
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
答:索引相当于目录,通过快速路径访问降低搜索时间。坏处是频繁操作的数据库需要开销来维护索引,且占空间,所以性能慢的、空间不足的、删改频 繁的数据库不用索引。对于每条记录有独特性的字段可以建索引,对于经常要查找的但类别也很多的字段也建索引,假如“城市”这个字段对于所有记录只能有北京或上海,个人认为不用索引。
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
答:对于身份证号等具有唯一识别性的索引是唯一索引,反之对于毕业院校这种有多条对应记录的是普通索引。数据多且杂而且字段不能有重复记录不能的时候需要唯一索引。
9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
答:不用,因为判断过程影响性能,况且qq号不是最重要的字段,一般不会作为重要的标识。而例如注册账号这种就需要判断。
10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
答:增加记录时同时对两者赋值,以后每次修改只对修改时间赋值。不能给外部调用,这样会影响事件记录的独立性。
11.修真类型应该是直接存储Varchar,还是应该存储int?
答:int。因为类型就那么几种。varchar存储随机性的数据,长度差异大的数据。
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
答:定一个能满足大多数的长度,用char的话,得注意如果字符长度不到char规定的长度,末尾有空格的问题。另外,如果用char的话,最好整个数据库里字符字段都用char。text是用2字节存放每个字符对象且存储上限255B,longtext是用4字节存放每个字符对象且存储上限4GB。
14.为什么不可以用Select * from table?
答:影响性能
》》》》
======================
插入10条数据,有索引的情况下查询一个名字:
mysql> select name from student where name='uheebvv';
+---------+
| name |
+---------+
| uheebvv |
+---------+
1 row in set (0.08 sec)
删掉索引:
mysql> drop index stu_idx on student;
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次检索:
mysql> select name from student where name='uheebvv';
+---------+
| name |
+---------+
| uheebvv |
+---------+
1 row in set (0.00 sec)
重新建立索引,然后检索:
mysql> select name from student where name='nhdgd';
+-------+
| name |
+-------+
| nhdgd |
+-------+
1 row in set (0.00 sec)
第一次没索引检索用了0.08秒,第三次检索把索引去掉了却是0秒。说明索引对10条记录的数据量影响不大。
===========================================================
评论