发表于: 2020-04-29 23:26:18

4 1248


深度思考

1.为什么不能使用select * from tbl_name?

select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引)select id from table1 where id=10000,即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。

     按照数据库的功能分为:唯一索引,主键索引,聚集索引。

唯一索引:unique key 不允许任何两行有相同的索引值的索引。

主键索引:primary key 数据库中经常有一列或多列其值唯一标识某一行。

聚集索引:该表中键值的逻辑顺序决定了表中相对应的物理顺序。聚集索引类似于电话簿,按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引,聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。

2.自增ID有什么坏处?什么样的场景下不使用自增ID?

是什么自增id即设计表时id字段设置为auto_increment的约束。不用每次设值,默认自动增加为1填充,AUTO_INCREMENT的列必须要建索引,一般把ID作为主键。

  • 优缺点:

  1. 优点(1.增加记录时,不指定id值,不用担心主键重复,每次自增+1 

  2.  2.顺序存储,检索速度快

  3.  3.数字型,占用空间小,易排序,传递方便)

  4. 缺点(1.不具有连续性,如果最大值的记录被删除,下一个插入的记录的id值依旧是最大值+1

  5. 2.合并表的时候,id会有冲突,两个表要关联

  6. 解决方案
    4.1自增ID的替代者UUID自增ID的替代者UUID
    UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
    UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。

    4.2 UUID的优点
    (1)能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
    (2)保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
    (3)安全性较高
    4.3 UUID的缺点:
    (1)uuid是无序的,这会严重影响到表的插入性能。
    (2)uuid占的空间大

    以下参考来自小课堂

    1. 对于自增ID的不具有连续性解决办法。
      方法一:可以用insert 语句直接指定id插入语句
      方法二:设置自增值 ALTER TABLE table_name AUTO_INCREMENT = 1;(数字1可以是由你自定义设置的自增值,table_name就是你要使用的数据表)
      方法三:用truncate table table_name ;语句直接清空表数据并重置自增值(table_name就是你要使用的数据表)

    2. 参考文献
      CSDN、百度百科

    3. 更多讨论
      (1) UUID在MySQL中是以什么类型存放的呢?
      在MySQL里保存UUID做主键,一般是使用char类型存放的。
      (网上有说在PostgreSQL等一些数据库里,都有专门的UUID类型,在这些数据库里以UUID做主键,效率是没问题的)
      (2)有没有办法解决UUID在MySQL数据库的效率慢的问题?
      可以把UUID作为逻辑主键,物理主键依然使用自增ID。
      (3)可以改变自增ID每次的自增量吗?
      auto_increment_offset表示自增长字段从哪个数开始。
      auto_increment_increment表示自增长字段每次递增的量,其默认值是1。
      通过set命令修改,不需要重启mysql,但是要重新打开命令行界面,一般需要用set global来设置(自定义等号后面的数字就可以了)
      set global auto_increment_increment=2;
      set global auto_increment_offset=2;

    4. 今天还看了一章的核心技术1

    5. 明天计划的事情:学基础,还有深度思考。
      遇到的问题:暂时没有
      收获:学习到基础和两个思考内容,看了一些师兄的日报




返回列表 返回列表
评论

    分享到