图片 6

记开发个人图书收藏清单小程序开发,设计表的时候

前边的书房开首化的前端消息已经到家,所以今后起先完毕DB的Script部分。

无论是在MSSQL依然MySQL大概Oracle,变长字段的长短衡量都是要日常面临的。
对于叁个变长的字段,在满意工作的气象下(其实所谓的满意工作是一个比较模糊的东西),到底是选项varchar(50)照旧varchar(200)亦恐怕varchar(500)?
对于保守型选拔,往往是选择四个非常大的尺寸,比方varchar(500)要比varchar(50)更兼具包容性,因为是变长字段的原故,存款和储蓄空间也相同。
这么的采纳并不可能说就不好,看站在哪个角度来看题目。
那正是说,相对于varchar(50),varchar(500)在更富有宽容性的还要,有哪些不佳的地点,也是内需怀恋的,。

 

新增Action:Shelf_Init.sql

此间的标准就是:对于可变长度的字段,在满意条件的前提下,尽恐怕采纳十分的短的变长字段长度。

Preface

图片 1

 

 

svc.sql

以下是四个相持极端的例证,以SQL Server为例,
TestVarchar1和TestVarchar2的SortColumn
字段长度分别是varchar(50)和varchar(7000),多个表写入10000条测同样的试数据,
SortColumn 的实在尺寸是三十几个字符。

    ibdata1 file is a shared system
tablespace of innodb engine.Although we always set variable of
“innodb_file_per_table” to “on” which means put the data of table
into their individual ibd files.The ibdata file will still store undo
log of our innodb tables.As the ibdata1 file is inevitable to make the
MySQL database running properly.Today,I’m gonna demonstrate a way to
rescue the table in an instance whose ibdata file is destroied by a
certain way such as write several unmeaningful characters into
it.

1 CREATE SCHEMA [svc]
2     AUTHORIZATION [dbo];
Create Table TestVarchar1
(
    Id INT IDENTITY(1,1),
    SortColumn varchar(50)
)

Create Table TestVarchar2
(
    Id INT IDENTITY(1,1),
    SortColumn varchar(8000)
)

DECLARE @SortColumn char(36);
set @SortColumn = CAST(NEWID() as char(36))
insert into TestVarchar1(SortColumn) values (@SortColumn)
insert into TestVarchar2(SortColumn) values (@SortColumn)
GO 10000

 

Shelf_Init.sql

 

Porcedure

 1 CREATE PROCEDURE [svc].[Shelf$Init](@json nvarchar(max))
 2 WITH ENCRYPTION
 3 AS
 4 BEGIN
 5     SET    NOCOUNT    ON;
 6     SET XACT_ABORT ON;
 7     BEGIN TRY
 8         BEGIN    TRAN;
 9 
10         declare    @nickName nvarchar(20), @shelfName nvarchar(20);
11         select    @nickName=NickName,     @shelfName=ShelfName
12         from    openjson (@json, '$')
13         with (
14             NickName        nvarchar(20),
15             ShelfName        nvarchar(20)
16         );
17 
18         insert    core._Party(Type, Alias) select k._User, @nickName
19         from    core.Party#Type() k;
20         declare    @userID int=@@identity;
21 
22         
23         insert    core._Party(PID, Type, Alias) select @userID, k._Shelf, @shelfName
24         from    core.Party#Type() k;
25 
26         COMMIT    TRAN;
27     END TRY
28     BEGIN CATCH
29         if (xact_state() = -1) ROLLBACK TRAN; throw;
30     END CATCH
31 END

1,基于存款和储蓄空间的思虑

 

好了,作者去尝试前端能否开首化消息进DB

存储空间上,存储不超越一定长度的变长字段,分裂长短的变长字段存款和储蓄空间是一致的,比方选用使用varchar(50)和varchar(500)是平等的,
也就说,对于不超过四十七个字符串的数码存款和储蓄,两个在大要空间侵吞上并未区分。

Backup the instance using Xtrabackup
first.

….

此地会开采,八个表的数目在完全一致的境况下,其积攒空间也是一心平等的,的确,并不会因为varchar使用三个较长的尺寸而多占用存款和储蓄空间

 1 [root@zlm1 13:46:27 ~]
 2 #innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf --user=root --password=Passw0rd /data/backup
 3 180805 13:46:40 innobackupex: Starting the backup operation
 4 ... //Omitted.
 5 
 6 [root@zlm1 13:47:14 /data/backup]
 7 #ls -l
 8 total 4
 9 drwxr-x--- 7 root root 4096 Aug  5 13:47 2018-08-05_13-46-40
10 
11 [root@zlm1 13:47:17 /data/backup]

在测量检验在此之前,我们须求贯彻一下Init Razor Pages代码:

图片 2

 

Init.cshtml.cs

2,基于质量的设想
选料varchar(50)依旧varchar(九千),在性质上着实有拨云见日的分裂,思索到一些查询要求内部存款和储蓄器(Memory
Grant),查询引擎会预估当前查询须要的内存,影响查询内部存款和储蓄器的因素有以下多少个方面
1,查询的花色,有未有成团运算,有未有排序等等
2,每种操作符涉及到的笔录数据
3,数据行的大大小小(这里是字段类型的长短并不是字段实际尺寸)
当行记录的数据类型长度十分的大的时候,施行布置预估的平均大小非常大,数据类型定义的长短越大,预估的长短越大,必要分配的内存越大
万一多个询问涉及一些凑合操作何况数据量非常大,就大概供给大量的内部存款和储蓄器来完结这些查询,查询引起会分配多余实际需求的内部存款和储蓄器。

Check
the target table which we want to rescue in plan.

 1     using M = Shelf;
 2     public class InitModel : PageModel
 3     {
 4         private readonly IShelfRepo _shelfRepo;
 5         public InitModel(IShelfRepo shelfRepo)
 6         {
 7             _shelfRepo = shelfRepo;
 8         }
 9         [BindProperty]
10         public InitInputModel Input { get; set; }
11 
12         public void OnGet()
13         {
14 
15         }
16 
17         public async Task<IActionResult> OnPostAsync()
18         {
19             if (ModelState.IsValid)
20             {
21                 await _shelfRepo.InitAsync(new M.InitSpec
22                 {
23                     NickName = Input.NickName.Trim(),
24                     ShelfName = Input.ShelfName.Trim()
25                 });
26                 return RedirectToPage("New");
27             }
28             return Page();
29         }
30     }

两头对数据行Size的预估是同一的(纵然是一丝一毫等同的多寡)

 1 zlm@192.168.56.100:3306 [sysbench]>show tables;
 2 +--------------------+
 3 | Tables_in_sysbench |
 4 +--------------------+
 5 | sbtest1            |
 6 | sbtest2            |
 7 | sbtest3            |
 8 | sbtest4            |
 9 +--------------------+
10 4 rows in set (0.00 sec)
11 
12 zlm@192.168.56.100:3306 [sysbench]>select count(*) from sbtest4;
13 +----------+
14 | count(*) |
15 +----------+
16 |    10000 |
17 +----------+
18 1 row in set (0.05 sec)
19 
20 zlm@192.168.56.100:3306 [sysbench]>delete from sbtest4 limit 1000;
21 Query OK, 1000 rows affected (0.17 sec)
22 
23 zlm@192.168.56.100:3306 [sysbench]>select count(*) from sbtest4;
24 +----------+
25 | count(*) |
26 +----------+
27 |     9000 |
28 +----------+
29 1 row in set (0.00 sec)

页面内容也急需修改一下form部分

图片 3图片 4

 

Init.cshtml

导致的结果正是四个查询的内部存款和储蓄器授予是毫发不爽的,同期第二个试行布置还只怕有贰个警示音信(金红的惊讶号)

Destroy the
ibdata1 file with “dd” command.

 1 <form method="post">
 2     <div class="form-group form-group-lg">
 3         <label asp-for="Input.NickName"></label>
 4         <input class="form-control form-control-lg" asp-for="Input.NickName" autocomplete="off">
 5         
 6     </div>
 7     <div class="form-group form-group-lg">
 8         <label asp-for="Input.ShelfName"></label>
 9         <input class="form-control form-control-lg" asp-for="Input.ShelfName" autocomplete="off">
10         
11     </div>
12     <div class="form-group text-right">
13         <button class="btn btn-warning btn-lg" type="submit">Save</button>
14     </div>
15 </form>

图片 5图片 6

 1 [root@zlm1 13:57:01 ~]
 2 #cd /data/mysql/mysql3306/data
 3 
 4 [root@zlm1 13:59:35 /data/mysql/mysql3306/data]
 5 #ls -l
 6 total 433892
 7 -rw-r----- 1 mysql mysql        56 Mar 18 15:10 auto.cnf
 8 -rw-r----- 1 mysql mysql     81490 Aug  5 13:50 error.log
 9 -rw-r----- 1 mysql mysql       882 Jul 31 16:36 ib_buffer_pool
10 -rw-r----- 1 mysql mysql 104857600 Aug  5 13:45 ibdata1
11 -rw-r----- 1 mysql mysql 104857600 Aug  5 13:45 ib_logfile0
12 -rw-r----- 1 mysql mysql 104857600 Aug  5 13:45 ib_logfile1
13 -rw-r----- 1 mysql mysql 104857600 Jul  1 14:32 ib_logfile2
14 -rw-r----- 1 mysql mysql  12582912 Aug  5 13:45 ibtmp1
15 -rw-r----- 1 mysql mysql      3924 Aug  5 13:53 innodb_status.3799
16 -rw-r----- 1 mysql mysql         0 Jul 14 02:52 innodb_status.3828
17 -rw-r----- 1 mysql mysql      4008 Jun  1 21:38 innodb_status.4131
18 drwxr-x--- 2 mysql mysql      4096 Jul  7 09:57 mrbs
19 drwxr-x--- 2 mysql mysql      4096 Mar 18 15:10 mysql
20 -rw-r----- 1 mysql mysql         5 Aug  5 13:45 mysql.pid
21 drwxr-x--- 2 mysql mysql      8192 Mar 18 15:10 performance_schema
22 -rw-r----- 1 mysql mysql       177 Jun  4 16:48 relay-bin.000001
23 -rw-r----- 1 mysql mysql        19 Jun  4 16:48 relay-bin.index
24 -rw-r----- 1 mysql mysql    526773 Aug  5 13:45 slow.log
25 drwxr-x--- 2 mysql mysql      8192 Mar 18 15:10 sys
26 drwxr-x--- 2 mysql mysql      4096 Jul 31 16:35 sysbench
27 -rw-r----- 1 mysql mysql  11610419 Jul 29 09:52 zlm1.log
28 
29 [root@zlm1 13:59:38 /data/mysql/mysql3306/data]
30 #dd if=/dev/zero of=./ibdata1 bs=1024 count=262144
31 262144+0 records in
32 262144+0 records out
33 268435456 bytes (268 MB) copied, 1.61997 s, 166 MB/s
34 
35 [root@zlm1 14:02:34 /data/mysql/mysql3306/data]
36 #ls -l|grep ibdata1
37 -rw-r----- 1 mysql mysql 268435456 Aug  5 14:06 ibdata1 //The ibdata1 turned out to be 256M and filled with zero.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图