黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL Innodb 存儲結(jié)構(gòu) 和 存儲Null值 用法詳解

瀏覽:49日期:2023-10-13 18:06:16

背景:

表空間:INNODB 所有數(shù)據(jù)都存在表空間當(dāng)中(共享表空間),要是開啟innodb_file_per_table,則每張表的數(shù)據(jù)會存到單獨的一個表空間內(nèi)(獨享表空間)。獨享表空間包括:數(shù)據(jù),索引,插入緩存,數(shù)據(jù)字典。共享表空間包括:Undo信息(不會回收<物理空間上>),雙寫緩存信息,事務(wù)信息等。段(segment):組成表空間,有區(qū)組成。區(qū)(extent):有64個連續(xù)的頁組成。每個頁16K,總共1M。對于大的數(shù)據(jù)段,每次最后可申請4個區(qū)。頁(page):是INNODB 磁盤管理的單位,有行組成。行(row):包括事務(wù)ID,回滾指針,列信息等。

目的1:了解表空間各個頁的信息和溢出行數(shù)據(jù)存儲的信息。通過該書作者蔣承堯編寫的工具:http://code.google.com/p/david-mysql-tools/source/browse/trunk/py_innodb_page_type/3個腳本:

py_innodb_page_info.py

View Code #! /usr/bin/env python #encoding=utf-8import mylibfrom sys import argvfrom mylib import myargvif __name__ == ’__main__’: myargv = myargv(argv) if myargv.parse_cmdline() == 0: pass else: mylib.get_innodb_page_type(myargv)

mylib.py

View Code encoding=utf-8import osimport includefrom include import *TABLESPACE_NAME=’D:mysql_datatestt.ibd’VARIABLE_FIELD_COUNT = 1NULL_FIELD_COUNT = 0class myargv(object): def __init__(self, argv): self.argv = argv self.parms = {} self.tablespace = ’’ def parse_cmdline(self): argv = self.argv if len(argv) == 1: print ’Usage: python py_innodb_page_info.py [OPTIONS] tablespace_file’ print ’For more options, use python py_innodb_page_info.py -h’ return 0 while argv: if argv[0][0] == ’-’: if argv[0][1] == ’h’: self.parms[argv[0]] = ’’ argv = argv[1:] break if argv[0][1] == ’v’: self.parms[argv[0]] = ’’ argv = argv[1:] else: self.parms[argv[0]] = argv[1] argv = argv[2:] else: self.tablespace = argv[0] argv = argv[1:] if self.parms.has_key(’-h’): print ’Get InnoDB Page Info’ print ’Usage: python py_innodb_page_info.py [OPTIONS] tablespace_filen’ print ’The following options may be given as the first argument:’ print ’-h help ’ print ’-o output put the result to file’ print ’-t number thread to anayle the tablespace file’ print ’-v verbose mode’ return 0 return 1def mach_read_from_n(page,start_offset,length): ret = page[start_offset:start_offset+length] return ret.encode(’hex’)def get_innodb_page_type(myargv): f=file(myargv.tablespace,’rb’) fsize = os.path.getsize(f.name)/INNODB_PAGE_SIZE ret = {} for i in range(fsize): page = f.read(INNODB_PAGE_SIZE) page_offset = mach_read_from_n(page,FIL_PAGE_OFFSET,4) page_type = mach_read_from_n(page,FIL_PAGE_TYPE,2) if myargv.parms.has_key(’-v’): if page_type == ’45bf’: page_level = mach_read_from_n(page,FIL_PAGE_DATA+PAGE_LEVEL,2) print 'page offset %s, page type <%s>, page level <%s>'%(page_offset,innodb_page_type[page_type],page_level) else: print 'page offset %s, page type <%s>'%(page_offset,innodb_page_type[page_type]) if not ret.has_key(page_type): ret[page_type] = 1 else: ret[page_type] = ret[page_type] + 1 print 'Total number of page: %d:'%fsize for type in ret: print '%s: %s'%(innodb_page_type[type],ret[type])

include.py

View Code #encoding=utf-8INNODB_PAGE_SIZE = 16*1024*1024# Start of the data on the pageFIL_PAGE_DATA = 38FIL_PAGE_OFFSET = 4 # page offset inside spaceFIL_PAGE_TYPE = 24 # File page type# Types of an undo log segment */TRX_UNDO_INSERT = 1TRX_UNDO_UPDATE = 2# On a page of any file segment, data may be put starting from this offsetFSEG_PAGE_DATA = FIL_PAGE_DATA# The offset of the undo log page header on pages of the undo logTRX_UNDO_PAGE_HDR = FSEG_PAGE_DATAPAGE_LEVEL = 26 #level of the node in an index tree; the leaf level is the level 0 */innodb_page_type={ ’0000’:u’Freshly Allocated Page’, ’0002’:u’Undo Log Page’, ’0003’:u’File Segment inode’, ’0004’:u’Insert Buffer Free List’, ’0005’:u’Insert Buffer Bitmap’, ’0006’:u’System Page’, ’0007’:u’Transaction system Page’, ’0008’:u’File Space Header’, ’0009’:u’擴展描述頁’, ’000a’:u’Uncompressed BLOB Page’, ’000b’:u’1st compressed BLOB Page’, ’000c’:u’Subsequent compressed BLOB Page’, ’45bf’:u’B-tree Node’ }innodb_page_direction={ ’0000’: ’Unknown(0x0000)’, ’0001’: ’Page Left’, ’0002’: ’Page Right’, ’0003’: ’Page Same Rec’, ’0004’: ’Page Same Page’, ’0005’: ’Page No Direction’, ’ffff’: ’Unkown2(0xffff)’}INNODB_PAGE_SIZE=1024*16 # InnoDB Page 16K

測試1:

root@localhost : test 02:26:13>create table tt(id int auto_increment,name varchar(10),age int,address varchar(20),primary key (id))engine=innodb;Query OK, 0 rows affected (0.17 sec)root@zhoujy:/var/lib/mysql/test# ls -lh tt.ibd -rw-rw---- 1 mysql mysql 96K 2012-10-17 14:26 tt.ibd

查看ibd:

root@zhoujy:/home/zhoujy/jiaoben/read_ibd# python py_innodb_page_info.py /var/lib/mysql/test/tt.ibd -vpage offset 00000000, page type <File Space Header>page offset 00000001, page type <Insert Buffer Bitmap>page offset 00000002, page type <File Segment inode>page offset 00000003, page type <B-tree Node>, page level <0000> ---葉子節(jié)點page offset 00000000, page type <Freshly Allocated Page>page offset 00000000, page type <Freshly Allocated Page>Total number of page: 6: Freshly Allocated Page: 2Insert Buffer Bitmap: 1File Space Header: 1B-tree Node: 1File Segment inode: 1

解釋:Total number of page: 總頁數(shù)Freshly Allocated Page:可用頁Insert Buffer Bitmap:插入緩存位圖頁Insert Buffer Free List:插入緩存空閑列表頁B-tree Node:數(shù)據(jù)頁Uncompressed BLOB Page:二進制大對象頁,存放溢出行的頁,即溢出頁上面得到的信息是表初始化大小為96K,他是有 Total number of page * 16 得來的。1個數(shù)據(jù)頁,2個可用頁面。

root@localhost : test 02:42:58>insert into tt values(name,age,address) values(’aaa’,23,’HZZZ’);

疑惑:為什么沒有申請區(qū)?區(qū)是64個連續(xù)的頁,大小1M。那么表大小也應(yīng)該是至少1M。但是現(xiàn)在只有96K(默認(rèn))。原因是因為每個段開始的時候,先有32個頁大小的碎片頁存放數(shù)據(jù),使用完之后才是64頁的連續(xù)申請,最多每次可以申請4個區(qū),保證數(shù)據(jù)的順序。這里看出表大小增加是按照至少64頁的大小的空間來增加的,即1M增加。驗證:填充數(shù)據(jù),寫滿這32個碎片頁,32*16 = 512K。看看是否能申請大于1M的空間。

View Code root@zhoujy:/home/zhoujy/jiaoben/read_ibd# ls -lh /var/lib/mysql/test/tt.ibd -rw-rw---- 1 mysql mysql 576K 2012-10-17 15:30 /var/lib/mysql/test/tt.ibdroot@zhoujy:/home/zhoujy/jiaoben/read_ibd# python py_innodb_page_info.py /var/lib/mysql/test/tt.ibd -vpage offset 00000000, page type <File Space Header>page offset 00000001, page type <Insert Buffer Bitmap>page offset 00000002, page type <File Segment inode>page offset 00000003, page type <B-tree Node>, page level <0001>page offset 00000004, page type <B-tree Node>, page level <0000>page offset 00000005, page type <B-tree Node>, page level <0000>page offset 00000006, page type <B-tree Node>, page level <0000>page offset 00000007, page type <B-tree Node>, page level <0000>page offset 00000008, page type <B-tree Node>, page level <0000>page offset 00000009, page type <B-tree Node>, page level <0000>page offset 0000000a, page type <B-tree Node>, page level <0000>page offset 0000000b, page type <B-tree Node>, page level <0000>page offset 0000000c, page type <B-tree Node>, page level <0000>page offset 0000000d, page type <B-tree Node>, page level <0000>page offset 0000000e, page type <B-tree Node>, page level <0000>page offset 0000000f, page type <B-tree Node>, page level <0000>page offset 00000010, page type <B-tree Node>, page level <0000>page offset 00000011, page type <B-tree Node>, page level <0000>page offset 00000012, page type <B-tree Node>, page level <0000>page offset 00000013, page type <B-tree Node>, page level <0000>page offset 00000014, page type <B-tree Node>, page level <0000>page offset 00000015, page type <B-tree Node>, page level <0000>page offset 00000016, page type <B-tree Node>, page level <0000>page offset 00000017, page type <B-tree Node>, page level <0000>page offset 00000018, page type <B-tree Node>, page level <0000>page offset 00000019, page type <B-tree Node>, page level <0000>page offset 0000001a, page type <B-tree Node>, page level <0000>page offset 0000001b, page type <B-tree Node>, page level <0000>page offset 0000001c, page type <B-tree Node>, page level <0000>page offset 0000001d, page type <B-tree Node>, page level <0000>page offset 0000001e, page type <B-tree Node>, page level <0000>page offset 0000001f, page type <B-tree Node>, page level <0000>page offset 00000020, page type <B-tree Node>, page level <0000>page offset 00000021, page type <B-tree Node>, page level <0000>page offset 00000022, page type <B-tree Node>, page level <0000>page offset 00000023, page type <B-tree Node>, page level <0000>Total number of page: 36:Insert Buffer Bitmap: 1File Space Header: 1B-tree Node: 33File Segment inode: 1

'額外'頁:4個page offset 00000000, page type <File Space Header> :文件頭空間頁page offset 00000001, page type <Insert Buffer Bitmap>:插入緩存位圖頁page offset 00000002, page type <File Segment inode>:文件段節(jié)點page offset 00000003, page type <B-tree Node>, page level <0001>:根頁碎片頁:32個page type <B-tree Node>, page level <0000>總共36個頁,ibd大小 576K的由來:32*16=512K(碎片頁)+ 4*16=64(額外頁),這里開始要是再插入的話,應(yīng)該申請最少1M的頁:

root@zhoujy:/home/zhoujy/jiaoben/read_ibd# ls -lh /var/lib/mysql/test/tt.ibd -rw-rw---- 1 mysql mysql 2.0M 2012-10-17 16:10 /var/lib/mysql/test/tt.ibdroot@zhoujy:/home/zhoujy/jiaoben/read_ibd# python py_innodb_page_info.py /var/lib/mysql/test/tt.ibdTotal number of page: 128:Freshly Allocated Page: 91Insert Buffer Bitmap: 1File Space Header: 1B-tree Node: 34File Segment inode: 1

頁從36跳到了128,因為已經(jīng)用完了32個碎片頁,新的頁會采用區(qū)的方式進行空間申請。信息中看到有很多可用頁,正好說明這點。

▲溢出行數(shù)據(jù)存放:INNODB存儲引擎是索引組織的,即每頁中至少有兩行記錄,因此如果頁中只能存放一行記錄,INNODB會自動將行數(shù)據(jù)放到溢出頁中。當(dāng)發(fā)生溢出行的時候,實際數(shù)據(jù)保存在BLOB頁中,數(shù)據(jù)頁只保存數(shù)據(jù)的前768字節(jié)(老的文件格式),新的文件格式(Barracuda)采用完全行溢出的方式,數(shù)據(jù)頁只保存20個字節(jié)的指針,BLOB也保存所有數(shù)據(jù)。如何查看表中有溢出行數(shù)據(jù)呢?

root@localhost : test 04:52:34>create table t1 (id int,name varchar(10),memo varchar(8000))engine =innodb default charset utf8;Query OK, 0 rows affected (0.16 sec)root@localhost : test 04:53:10>insert into t1 values(1,’zjy’,repeat(’我’,8000));Query OK, 1 row affected (0.00 sec)

查看ibd:

root@zhoujy:/home/zhoujy/jiaoben/read_ibd# python py_innodb_page_info.py /var/lib/mysql/test/t1.ibd -vpage offset 00000000, page type <File Space Header>page offset 00000001, page type <Insert Buffer Bitmap>page offset 00000002, page type <File Segment inode>page offset 00000003, page type <B-tree Node>, page level <0000>page offset 00000004, page type <Uncompressed BLOB Page>page offset 00000005, page type <Uncompressed BLOB Page>Total number of page: 6:Insert Buffer Bitmap: 1Uncompressed BLOB Page: 2File Space Header: 1B-tree Node: 1File Segment inode: 1

從信息中看到,剛才插入的一行記錄,已經(jīng)溢出了,保存到了2個BLOB頁中(<Uncompressed BLOB Page>)。因為1頁只有16K,又要存2行數(shù)據(jù),所以每行記錄最好小于8K,而上面的遠遠大于8K,所以被溢出了。當(dāng)然這個也不是包括特大字段,要是一張表里面有5個字段都是varchar(512)【多個varchar的總和大于8K就可以】,也會溢出:

root@localhost : test 05:08:39>create table t2 (id int,name varchar(1000),address varchar(512),company varchar(200),xx varchar(512),memo varchar(512),dem varchar(1000))engine =innodb default charset utf8;Query OK, 0 rows affected (0.17 sec)root@localhost : test 05:08:43>insert into t2 values(1,repeat(’周’,1000),repeat(’我’,500),repeat(’丁’,500),repeat(’啊’,500),repeat(’噢’,500),repeat(’阿a’,500));

1000+500+500+500+500+500=3500*3>8000字節(jié);行會被溢出:

root@zhoujy:/home/zhoujy/jiaoben/read_ibd# python py_innodb_page_info.py /var/lib/mysql/test/t2.ibd -vpage offset 00000000, page type <File Space Header>page offset 00000001, page type <Insert Buffer Bitmap>page offset 00000002, page type <File Segment inode>page offset 00000003, page type <B-tree Node>, page level <0000>page offset 00000004, page type <Uncompressed BLOB Page>page offset 00000000, page type <Freshly Allocated Page>Total number of page: 6:Insert Buffer Bitmap: 1Freshly Allocated Page: 1File Segment inode: 1B-tree Node: 1File Space Header: 1Uncompressed BLOB Page: 1

<Uncompressed BLOB Page> 頁存放真正的數(shù)據(jù),那數(shù)據(jù)頁到底存放什么?用hexdump查看:

root@zhoujy:/home/zhoujy/jiaoben/read_ibd# hexdump -C -v /var/lib/mysql/test/t1.ibd > t1.txt

查看ibd:

View Code 3082 0000c090 00 32 01 10 80 00 00 01 7a 6a 79 e6 88 91 e6 88 |.2......zjy.....|3083 0000c0a0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3084 0000c0b0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3085 0000c0c0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3086 0000c0d0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3087 0000c0e0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3088 0000c0f0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3089 0000c100 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3090 0000c110 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3091 0000c120 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3092 0000c130 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3093 0000c140 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3094 0000c150 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3095 0000c160 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3096 0000c170 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3097 0000c180 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3098 0000c190 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3099 0000c1a0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3100 0000c1b0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3101 0000c1c0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3102 0000c1d0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3103 0000c1e0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3104 0000c1f0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3105 0000c200 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3106 0000c210 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3107 0000c220 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3108 0000c230 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3109 0000c240 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3110 0000c250 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3111 0000c260 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3112 0000c270 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3113 0000c280 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3114 0000c290 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3115 0000c2a0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3116 0000c2b0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3117 0000c2c0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3118 0000c2d0 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3119 0000c2e0 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3120 0000c2f0 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3121 0000c300 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3122 0000c310 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3123 0000c320 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3124 0000c330 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3125 0000c340 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3126 0000c350 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3127 0000c360 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 |................|3128 0000c370 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 |................|3129 0000c380 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 88 91 e6 |................|3130 0000c390 88 91 e6 88 91 e6 88 91 e6 88 91 00 00 02 1c 00 |................|

文本中剛好是48行,每行16字節(jié)。48*16=768字節(jié),剛好驗證了之前說的:數(shù)據(jù)頁只保存數(shù)據(jù)的前768字節(jié)(老的文件格式)。

總結(jié)1:通過上面的信息,可以能清楚的知道ibd表空間各個頁的分布和利用信息以及表空間大小增加的步長;特別注意的是溢出行,一個頁中至少包含2行數(shù)據(jù),如果頁中存放的行數(shù)越多,性能就越好。

************************************************************************

目的2:了解表空間如何存儲數(shù)據(jù),以及對NULL值的存儲。

測試2:在測試前先了解INNODB的存儲格式(row_format)。老格式(Antelope):Compact<默認(rèn)>,Redumdant;新格式(Barracuda):Compressed,Dynamic。這里測試指針對默認(rèn)的存儲格式。Compact行記錄方式如下:

|變長字段長度列表(1~2字節(jié))|NULL標(biāo)志位(1字節(jié))|記錄頭信息(5字節(jié))|RowID(6字節(jié))|事務(wù)ID(6字節(jié))|回滾指針(7字節(jié))|

上面信息除了 'NULL標(biāo)志位'[表中所有字段都定義為NOT NULL],'RowID'[表中有主鍵] ,'變長字段長度列表' [沒有變長字段] 可能不存在外,其他信息都會出現(xiàn)。所以一行數(shù)據(jù)除了列數(shù)據(jù)所占用的字段外,還需要額外18字節(jié)。

一:字段全NULL

mysql> create table mytest(t1 varchar(10),t2 varchar(10),t3 varchar(10) ,t4 varchar(10))engine=innodb charset = latin1 row_format=compact;Query OK, 0 rows affected (0.08 sec)mysql> insert into mytest values(’a’,’bb’,’bb’,’ccc’);Query OK, 1 row affected (0.02 sec)mysql> insert into mytest values(’a’,’ee’,’ee’,’fff’);Query OK, 1 row affected (0.01 sec)mysql> insert into mytest values(’a’,NULL,NULL,’fff’);Query OK, 1 row affected (0.00 sec)

測試數(shù)據(jù)準(zhǔn)備完之后,執(zhí)行shell命令:

root@zhoujy:/usr/local/mysql/test# hexdump -C -v mytest.ibd > /home/zhoujy/mytest.txt

打開mytest.txt文件找到supremum這一行:

0000c070 73 75 70 72 65 6d 75 6d 03 02 02 01 00 00 00 10 |supremum........| ----------->一行,16字節(jié)0000c080 00 25 00 00 00 03 b9 00 00 00 00 02 49 01 82 00 |.%..........I...|0000c090 00 01 4a 01 10 61 62 62 62 62 63 63 63 03 02 02 |..J..abbbbccc...|0000c0a0 01 00 00 00 18 00 23 00 00 00 03 b9 01 00 00 00 |......#.........|0000c0b0 02 49 02 83 00 00 01 4b 01 10 61 65 65 65 65 66 |.I.....K..aeeeef|0000c0c0 66 66 03 01 06 00 00 20 ff a6 00 00 00 03 b9 02 |ff..... ........|0000c0d0 00 00 00 02 49 03 84 00 00 01 4c 01 10 61 66 66 |....I.....L..aff|0000c0e0 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |f...............|

解釋:第一行數(shù)據(jù):03 02 02 01/*變長字段*/ ---- 表中4個字段類型為varchar,并且沒有NULL數(shù)據(jù),而且每個字段君小于255。00 /*NULL標(biāo)志位,第一行沒有null的數(shù)據(jù)*/00 00 10 00 25 /*記錄頭信息,固定5個字節(jié)*/00 00 00 03 b9 00/*RowID,固定6個字節(jié),表沒有主鍵*/00 00 00 02 49 01 /*事務(wù)ID,固定6個字節(jié)*/82 00 00 01 4a 01 10 /*回滾指針,固定7個字節(jié)*/61 62 62 62 62 63 63 63/*列的數(shù)據(jù)*/第二行數(shù)據(jù)和第一行數(shù)據(jù)一樣(顏色匹配)。第三行數(shù)據(jù)(有NULL值)和第一行的解釋的顏色對應(yīng)起來比較差別:

03 02 02 01 VS 03 01 ----------當(dāng)值為NULL時,變長字段列表不會占用存儲空間。61 62 62 62 62 63 63 63 VS 61 66 66 66 --------- NULL值沒有存儲,不占空間

結(jié)論:當(dāng)值為NULL時,變長字段列表不會占用存儲空間。NULL值沒有存儲,不占空間,但是需要一個標(biāo)志位(一行一個)。

二:字段全NOT NULL

mysql> create table mytest(t1 varchar(10) NOT NULL,t2 varchar(10) NOT NULL,t3 varchar(10) NOT NULL,t4 varchar(10) NOT NULL)engine=innodb charset = latin1 row_format=compact;Query OK, 0 rows affected (0.03 sec)mysql> insert into mytest values(’a’,’bb’,’bb’,’ccc’);Query OK, 1 row affected (0.01 sec)mysql> insert into mytest values(’a’,’ee’,’ee’,’fff’);Query OK, 1 row affected (0.01 sec)mysql> insert into mytest values(’a’,NULL,NULL,’fff’);ERROR 1048 (23000): Column ’t2’ cannot be null

步驟和上面一樣,得到的ibd的結(jié)果是:

0000c070 73 75 70 72 65 6d 75 6d 03 02 02 01 00 00 10 00 |supremum........|0000c080 24 00 00 00 03 b9 03 00 00 00 02 49 07 87 00 00 |$..........I....|0000c090 01 4f 01 10 61 62 62 62 62 63 63 63 03 02 02 01 |.O..abbbbccc....|0000c0a0 00 00 18 ff cb 00 00 00 03 b9 04 00 00 00 02 49 |...............I|0000c0b0 08 88 00 00 01 50 01 10 61 65 65 65 65 66 66 66 |.....P..aeeeefff|

和上面比較,發(fā)現(xiàn)少了NULL的標(biāo)志位信息。結(jié)論: NULL值會有額外的空間來存儲,即每行1字節(jié)的大小。對于相同數(shù)據(jù)的表,字段中有NULL值的表比NOT NULL的大。

三:1個NULL,和1個’’的數(shù)據(jù):

mysql> create table mytest(t1 varchar(10) NOT NULL,t2 varchar(10) NOT NULL DEFAULT ’’,t3 varchar(10) NOT NULL ,t4 varchar(10))engine=innodb charset = latin1 row_format=compact;Query OK, 0 rows affected (0.02 sec)mysql> insert into mytest(t1,t2) values(’A’,’BB’);Query OK, 1 row affected, 1 warning (0.01 sec)

步驟和上面一樣,得到的ibd的結(jié)果是:

0000c070 73 75 70 72 65 6d 75 6d 00 02 01 01 00 00 10 ff |supremum........|0000c080 ef 00 00 00 43 b9 03 00 00 00 02 4a 15 90 00 00 |....C......J....|0000c090 01 c2 01 10 41 42 42 00 00 00 00 00 00 00 00 00 |....ABB.........|

和上面2個區(qū)別主要在于變長列表和列數(shù)據(jù)這里。

結(jié)論:列數(shù)據(jù)信息里表明了 NULL數(shù)據(jù)和’’數(shù)據(jù)都不占用任何空間,對于變長字段列表的信息,和一對比得出:‘’數(shù)據(jù)雖然不需要占用任何存儲空間,但是在變長字段列表里面還是需要占用一個字節(jié)<畢竟還是一個‘’值>,NULL值不需要占用”,只是NULL會有額外的一個標(biāo)志位,所以能有個優(yōu)化的說法:“數(shù)據(jù)庫表中能設(shè)置NOT NULL的就盡量設(shè)置為NOT NULL,除非確實需要NULL值得。” 在此得到了證明。

上面的測試都是針對VARCHAR的變長類型,那對于CHAR呢?

CHAR 測試:

root@localhost : test 10:33:35>create table mytest(t1 char(10),t2 char(10),t3 char(10) ,t4 char(10))engine=innodb charset = latin1 row_format=compact;Query OK, 0 rows affected (0.16 sec)root@localhost : test 10:33:59>insert into mytest values(’a’,’bb’,’bb’,’ccc’);Query OK, 1 row affected (0.00 sec)root@localhost : test 10:34:09>insert into mytest values(’a’,’ee’,’ee’,’fff’);Query OK, 1 row affected (0.00 sec)root@localhost : test 10:34:19>insert into mytest values(’a’,NULL,NULL,’fff’);Query OK, 1 row affected (0.00 sec)

打開ibd生成的文件:

0000c060 02 00 1b 69 6e 66 69 6d 75 6d 00 04 00 0b 00 00 |...infimum......|0000c070 73 75 70 72 65 6d 75 6d 00 00 00 10 00 41 00 00 |supremum.....A..|0000c080 00 0a f5 00 00 00 00 81 2d 07 80 00 00 00 32 01 |........-.....2.|0000c090 10 61 20 20 20 20 20 20 20 20 20 62 62 20 20 20 |.a bb |0000c0a0 20 20 20 20 20 62 62 20 20 20 20 20 20 20 20 63 | bb c|0000c0b0 63 63 20 20 20 20 20 20 20 00 00 00 18 00 41 00 |cc .....A.|0000c0c0 00 00 0a f5 01 00 00 00 81 2d 08 80 00 00 00 32 |.........-.....2|0000c0d0 01 10 61 20 20 20 20 20 20 20 20 20 65 65 20 20 |..a ee |0000c0e0 20 20 20 20 20 20 65 65 20 20 20 20 20 20 20 20 | ee |0000c0f0 66 66 66 20 20 20 20 20 20 20 06 00 00 20 ff 70 |fff ... .p|0000c100 00 00 00 0a f5 02 00 00 00 81 2d 09 80 00 00 00 |..........-.....|0000c110 32 01 10 61 20 20 20 20 20 20 20 20 20 66 66 66 |2..a fff|0000c120 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 | .........|

和一的varchar比較發(fā)現(xiàn):少了變長字段列表,但是對于char來講,需要固定長度來存儲的,存不到固定長度,也會被填充滿。如:20;并且NULL值也不需要占用存儲空間。

混合(varchar,char):

root@localhost : test 11:21:48>create table mytest(t1 int,t2 char(10),t3 varchar(10) ,t4 char(10))engine=innodb charset = latin1 row_format=compact;Query OK, 0 rows affected (0.17 sec)root@localhost : test 11:21:50>insert into mytest values(1,’a’,’b’,’c’);Query OK, 1 row affected (0.00 sec)root@localhost : test 11:22:06>insert into mytest values(11,’aa’,’bb’,’cc’);Query OK, 1 row affected (0.00 sec)

從上面的表結(jié)構(gòu)中看出:1,變長字段列表長度:12,NULL標(biāo)志位:13,記錄頭信息:54,RowID:65,事務(wù)ID:66,回滾指針:7

idb的信息:

0000c070 73 75 70 72 65 6d 75 6d 01 00 00 00 10 00 33 00 |supremum......3.| 0000c080 00 00 0a f5 07 00 00 00 81 2d 1a 80 00 00 00 32 |.........-.....2|0000c090 01 10 80 00 00 01 61 20 20 20 20 20 20 20 20 20 |......a |0000c0a0 62 63 20 20 20 20 20 20 20 20 20 02 00 00 00 18 |bc .....|0000c0b0 ff be 00 00 00 0a f5 08 00 00 00 81 2d 1b 80 00 |............-...|0000c0c0 00 00 32 01 10 80 00 00 0b 61 61 20 20 20 20 20 |..2......aa |0000c0d0 20 20 20 62 62 63 63 20 20 20 20 20 20 20 20 00 | bbcc .|

從上信息得出和之前預(yù)料的一樣:因為表中只有一個varchar字段,所以,變長列表長度就只有:01 特別注意的是:各個列數(shù)據(jù)存儲的信息:t1字段為int 類型,占用4個字節(jié)的大小。第一行:80 00 00 01 就是表示 1 數(shù)字;第二行:80 00 00 0b 表示了11的數(shù)字。[select hex(11) == B ],其他的和上面的例子一樣。

上面都是latin1單字節(jié)字符集的說明,那對于多字節(jié)字符集的情況怎么樣?

root@localhost : test 11:52:10>create table mytest(id int auto_increment,t2 varchar(10),t3 varchar(10) ,t4 char(10),primary key(id))engine=innodb charset = utf8 row_format=compact;Query OK, 0 rows affected (0.17 sec)root@localhost : test 11:52:11>insert into mytest(t2,t3,t4) values(’bb’,’bb’,’ccc’);Query OK, 1 row affected (0.00 sec)root@localhost : test 11:55:34>insert into mytest(t2,t3,t4) values(’我們’,’他們’,’我們的’);Query OK, 1 row affected (0.00 sec)

ibd信息如下:

0000c070 73 75 70 72 65 6d 75 6d 0a 02 02 00 00 00 10 00 |supremum........|0000c080 28 80 00 00 01 00 00 00 81 2d 27 80 00 00 00 32 |(........-’....2|0000c090 01 10 62 62 62 62 63 63 63 20 20 20 20 20 20 20 |..bbbbccc |0000c0a0 0a 06 06 00 00 00 18 ff c7 80 00 00 02 00 00 00 |................|0000c0b0 81 2d 28 80 00 00 00 32 01 10 e6 88 91 e4 bb ac |.-(....2........|0000c0c0 e4 bb 96 e4 bb ac e6 88 91 e4 bb ac e7 9a 84 20 |............... |

因為表有了主鍵,所以ROWID(6字節(jié))不見了。特別注意的是:變長字段列表是3?表里面的varchar類型的列只有2個啊。經(jīng)測試得出:在多字節(jié)字符集的條件下,char類型被當(dāng)成可變長度的類型來處理,他們的行存儲基本沒有區(qū)別,所以這個就出現(xiàn)變長列表是3了,因為是utf8字符集,占用三個字節(jié)。所以一個漢字均占用了一個頁中3個字節(jié)的空間(”我們“ :e6 88 91 e4 bb ac)。數(shù)據(jù)列的信息:id列的1值,應(yīng)該是 80 00 00 01,為什么這個顯示00 32 01 10,而且所有的id都是00 32 01 10。測試發(fā)現(xiàn),id為自增主鍵的時候,id的4個字節(jié)長度都是以00 32 01 10 表示。否則和前面一個例子里說的,用select HEX(X) 表示。

總結(jié)2:上面的測試都是基于COMPACT存儲格式的,不管是varchar還是char,NULL值是不需要占用存儲空間的;特別需要注意的是Redumdant的記錄頭信息需要6個固定字節(jié);在多字節(jié)字符集的條件下,CHAR和VARCHAR的行存儲基本是沒有區(qū)別的。

到此這篇關(guān)于MySQL Innodb 存儲結(jié)構(gòu) 和 存儲Null值 用法詳解的文章就介紹到這了,更多相關(guān)MySQL Innodb 存儲結(jié)構(gòu) 存儲Null值內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品短视频 | 婷婷四房色播 | 国产又粗又猛又大爽又黄老大爷 | 国产一区二区精品在线 | 草草草在线 | 影音先锋资源av不撸 | 粉嫩av一区二区在线播 | 日本猛少妇色xxxxx猛交图片 | 太粗太长太硬高潮了av | 久久精品成人无码观看免费 | 一级二级三级毛片 | 国产第一网站 | 国产精品毛片久久久久久久 | 白嫩少妇激情无码 | 亚洲国产精品成人一区二区在线 | 日啪| 91精品一区 | 欧美性猛交ⅹxxx乱大交妖精 | 中文字幕无产乱码 | 成人未满十八无毛片 | 丰满少妇高潮在线播放不卡 | 牛牛热在线视频 | 西野翔夫の目の前で犯在线 | 中文字幕美人妻亅u乚一596 | 丰满岳乱妇一区二区 | 久久久久久久亚洲国产精品87 | 午夜成人免费影院 | 91亚洲精品视频 | 亚洲va久久久噜噜噜久久男同 | 九九热中文字幕 | 国产999精品久久久影片官网 | 澳门一级黄色片 | 成人影片在线播放 | 56国语精品自产拍在线观看 | 小宝极品内射国产在线 | 亚洲 自拍 另类小说综合图区 | 雨宫琴音av一区在线播放 | 国产天堂亚洲 | 国产精品99久久久久的智能播放 | 区二区三区玖玖玖 | 综合久久精品 | 国产精品农村妇女白天高潮 | 成人国产一区二区三区精品 | 99热在线观看 | 久久久久久久网站 | 日韩国产欧美综合 | 高清无码午夜福利视频 | 美女av一区二区三区 | 丰满少妇aaaaaa爰片毛片 | 国产色诱视频 | 四季av中文字幕一区 | 国产欧美日韩在线视频 | 中文字幕av久久爽一区 | 免费看一级黄色毛片 | 亚洲第一成年免费网站 | 日日干夜夜干 | 天天躁夜夜躁狠狠躁2021牛牛 | 欧美人与动欧交视频 | 久久久久久影视 | 好男人社区www在线观看 | 暖暖视频日本在线观看 | 丁香婷婷久久 | 欧美亚洲国产日韩 | 欧美成人免费一区二区 | 成在线人视频免费视频 | 超碰97人人在线 | 国产偷久久一级精品av小说 | 黑人大荫蒂高潮视频 | 国产精品成人免费看片 | 久久金品| 慈禧一级淫片免费放特级 | 成人字幕 | 无码av中文一区二区三区桃花岛 | 亚洲人高潮女人毛茸茸 | 综合精品国产 | 日韩欧美色 | zzijzzij亚洲成熟少妇 | 久精品视频 | 欧美精品成人久久 | 日本一级中文字幕久久久久久 | 亚洲高清视频一区 | 亚洲毛片在线看 | 亚洲中文字幕在线观看 | x88av蜜桃臀一区二区 | 成熟女人毛片www免费版在线 | 一区二区三区乱码在线 | 欧洲 | 少妇下蹲露大唇无遮挡 | 国产在线播放91 | 毛片毛片毛片毛片毛片毛片 | 日韩一区中文字幕 | 日韩一区二区三区av | 国产片一区二区三区 | 欧美性啪啪 | 懂色av色吟av夜夜嗨 | 在线观看国产亚洲 | av中文字 | 永久免费未满蜜桃 | 中文字幕日产每天更新40 | 中文字幕一级 | 一区二区三区入口 | 日韩精品一区二区在线 | 中国丰满熟妇xxxx性 | 亚洲一区二区综合 | 亚洲欧美色一区二区三区 | 国产手机在线αⅴ片无码观看 | www国产精品内射老熟女 | 亚洲天堂手机版 | 极品妇女扒开粉嫩小泬 | 97国产精品久久久 | 国产一级黄色 | 国产精品成人免费视频网站 | 免费看a级肉片 | 亚洲精品日本久久一区二区三区 | a级毛片网 | 特级毛片在线播放 | 国产精品久久久久一区二区三区 | 亚洲欧洲精品一区二区 | 无套内谢88av免费看 | 国产成人av一区二区三区在线观看 | 啃乳做爰猛烈床戏三级 | 久久精品亚洲天堂 | 亚洲偷自拍另类图片二区 | 亚洲免费一二三区 | 一级片观看 | 欧美日韩在线观看成人 | 全国最大色 | 求欧美精品网址 | 色肉色伦交国产69精品 | 久久久久欠精品国产毛片国产毛生 | 国产精品一区二区欧美黑人喷潮水 | 麻豆av传媒蜜桃天美传媒 | 国产精品1000 | 777精品出轨人妻国产 | 99热导航| 久久久免费观看 | √天堂中文www官网在线 | 国产二区免费 | 亚洲精品乱码久久久久久国产主播 | 精品国产精品国产偷麻豆 | 欧美最黄视频 | 国产日产久久欧美清爽 | 在线观看视频免费入口 | 日本精品一区二区在线观看 | 亚洲精品国产精品乱码不卡√香蕉 | 午夜av一区 | 国产成人高清 | 欧美综合人人做人人爱 | 国产人成免费爽爽爽视频 | 亚洲卡一卡二 | 青青久操| 国产精品久久久久久精 | 亚洲精品无码人妻无码 | 久久精选视频 | 黄色aa一级片 | 九九影院最新理论片 | 极品美女无套呻吟啪啪 | 国产在线久 | 日韩福利在线观看 | 国产9色在线 | 日韩 | 欧美成人精品高清视频在线观看 | 在线a亚洲视频播放在线观看 | 青青青国产在线观看免费 | 91欧美一区二区三区 | 少妇裸体淫交视频免费观看 | 亚洲香蕉网站 | 欧洲性生活片 | 国产精品视频yy9299一区 | 亚洲精一区 | 日日爱网站 | 亚洲成人综合网站 | 国产精品12 | 国产自偷自拍 | 24小时日本韩国在线观看 | 在线播放一级片 | 爱草在线 | 欧美色欧美| 女人与牲口性恔配视频免费 | 中文字幕在线网址 | 成人短视频在线免费观看 | 欧美另类一区二区 | 天天鲁一鲁摸一摸爽一爽视频 | 在厨房拨开内裤进入在线视频 | 女女同恋一区二区在线观看 | 国产欧亚州美日韩综合区 | 超碰520| 免费欧美一级片 | 一本色道久久88亚洲精品综合 | 日日噜噜噜噜人人爽日本精品 | 国产网红无码精品视频 | 久久久久国产一区二区三区四区 | 欧美精品久久久久久久久久 | 视频在线一区二区 | 国语一区二区 | 无码欧美毛片一区二区三 | 干欧美 | 亚洲激情欧美激情 | 天天综合亚洲综合网天天αⅴ | 黄色一极片| 伊人久久精品视频 | 蜜桃视频在线观看www社区 | 自拍亚洲国产 | 美女裸体十八禁免费网站 | 精品国产日韩亚洲一区 | 女性向av免费观看入口silk | 国内精品免费午夜又爽又色愉情 | 日本公妇乱偷中文字幕 | 秋霞网久久 | 天堂一码二码专区 | 大地资源在线观看官网第三页 | 国产精品免费麻豆入口 | 国产精品69久久久久999小说 | 国产日韩欧美综合 | 亚洲国产成人精品青青草原导航 | 日韩欧美激情视频 | 欧美性猛交xxxx乱大交3 | 国产伦精品一区二区三区免.费 | 国产偷窥盗摄一区二区 | 国产精品一区久久久 | 免费看h网站 | 免费麻豆国产一区二区三区四区 | 国产超碰人人做人人爽av牛牛 | 在线观看91av | 91视频这里只有精品 | 黄色a视频 | 成人性做爰片免费视频 | 黄色永久视频 | 欧美成人aaaaⅴ片在线看 | 一本色道无码不卡在线观看 | 亚洲一区二区二区久久成人婷婷 | 欧美精品乱码99久久蜜桃 | 国产精品久久久久久久久久综合 | 九九热re| 亚洲国产成人片在线观看无码 | 精品久久久一区 | 国产在线毛片 | 中文字幕一区二区三区在线观看 | 少妇丰满极品嫩模白嫩 | av在线网站观看 | 久久国产成人 | 真人真事免费毛片 | 亚洲无吗在线观看 | 亚洲www| 久久久久少妇 | 2023亚洲精品国偷拍自产在线 | 国产香蕉在线视频 | 国产欧美一级二级三级在线视频 | 亚洲免费黄色 | 国产又爽又黄免费视频 | 国产成人精品无码一区二区 | 中文字幕在线观看国产 | 婷婷在线网 | xxx日韩| 欧美乱妇高清无乱码在线观看 | 操碰视频 | 国产精品91在线 | 性生交大片免费看女人按摩 | 久久www人成免费产片 | 华人av在线 | 影音先锋美女 | 男人的天堂97 | 各种高潮超清特写tv | 色窝在线 | 国产精品成人免费一区久久羞羞 | 国产91在线 | 中文 | 五月激情小说网 | 亚洲男人天堂2019 | 巨胸美女爆视频网站 | 精品熟女少妇av免费观看 | 手机在线看片 | 日本又紧又色又嫩又爽的视频 | 天堂在线视频 | 午夜性视频国产牛牛视频 | 亚洲视频二 | 日韩中文字幕免费视频 | 日本免费一级片 | 国产综合色产在线精品 | 国产精品永久免费 | 国产区精品一区二区不卡中文 | 一本到不卡 | 亚洲精品偷拍 | 国产永久av | 91久久捆绑调教美女 | 97人人爱 | 久久影视一区二区 | 交视频在线播放 | 国产三级国产精品 | 少妇愉情理伦片高潮日本 | 国产精品免费观看视频 | 黄色一级录像片 | 色妺妺视频网 | 欧洲金发美女大战黑人 | 五月六月婷婷 | 免费三级网站 | 成人做爰高潮片免费视频美国 | 蜜色av| 国产精品一区二区三区在线 | 在线观看日韩 | 公的~yin之手筱田优中文字幕 | 青草青草久热精品视频国产4 | 国产做受蜜臀 | 久久久精品久久日韩一区综合 | a在线| 亚洲性生活网站 | 国产成人a在线观看视频 | 欧美精品久久天天躁 | 4438xx亚洲最大五色丁香 | 中国肥老太婆高清video | 亚洲色图36p | 丝袜五月天 | 色婷婷狠狠五月综合天色拍 | 国产xxxx99真实实拍 | 日韩欧美中文一区 | 国产成人夜色高潮福利影视 | 欧美成人看片一区二区三区尤物 | 亚洲精品国产a久久久久久 亚洲精品国产crm | 国产二区一区 | 又湿又紧又大又爽a视频 | 人人爽久久久噜噜噜婷婷 | 少妇高潮网站 | 国产精品久久二区二区 | 99热九九这里只有精品10 | 日本久久久久久科技有限公司 | 国产经典久久 | 在线看黄网址 | 不卡中文字幕在线观看 | 国产91精品精华液一区二区三区 | 18男女无套免费视频 | 久久亚洲在线 | 亚洲人做受 | 鲁丝一区二区三区免费 | 69久久夜色精品国产69 | 牲欲强的熟妇农村老妇女 | 国产女上位 | 中文字幕丰满子伦 | 色欧美视频 | 日本中文字幕视频在线 | 成人免费精品网站 | 中文在线资源 | 美女久久精品 | 二三区视频 | 啪视频免费 | 一区二区视频在线免费观看 | 亚洲 欧美日韩 综合 国产 | 91精品久久久久久久久中文字幕 | 日韩国产在线一区 | 1000部精品久久久久久久久 | 日韩精品无码一区二区中文字幕 | 91九色蝌蚪porny | 亚洲成人精品一区二区三区 | 18禁超污无遮挡无码免费网站国产 | 欧美亚洲国产精品久久蜜芽直播 | 91蜜桃臀久久一区二区 | 国产理论一区二区三区 | 成人免费在线播放视频 | 萌白酱国产一区二区 | 97精品国产97久久久久久免费 | 色欧美色| 日韩在线一区二区三区四区 | 女国产精品视频一区二区三区 | 久操免费在线 | 久久久久女人精品毛片九一韩国 | 一级特级黄色片 | 欧美性猛交xxxxx按摩欧美 | 人妻少妇久久中文字幕一区二区 | 国产成a人无v码亚洲福利 | 韩日精品在线观看 | 在线观看网址你懂的 | 日韩毛片av | 99久久久国产精品 | 少妇的性事hd | 丰满少妇被猛烈进入 | 99啪啪| 国产av人人夜夜澡人人爽 | 高清黄色毛片 | 欧美一区成人 | 国产一区二区在线免费 | 97人洗澡人人澡人人爽人人模 | 日韩做爰视频免费 | 五月综合色| 超碰97人人人人人蜜桃 | 国产成人久久久精品二区三区 | 在线精品亚洲一区二区 | 亚州视频在线 | 久久爱综合| 一色桃子jul457中文字幕 | 久久精品噜噜噜成人 | 不卡的日韩av | 国产精品色| 丝袜精品 欧美 亚洲 自拍 | 亚洲日本va午夜在线电影 | 国色天香网www在线观看 | 国产一区亚洲二区 | 欧美日韩色综合 | 国产网站免费看 | 天天色宗合 | 疯狂做受xxxx高潮不断 | 深夜视频在线观看 | 国产精品精品久久久久久甜蜜软件 | 超碰人人爱人人 | yw尤物av无码国产在线观看 | 国产做a爰片久久毛片a片美国 | 国产对白刺激视频 | 激情亚洲| 大学生久久香蕉国产线看观看 | 伊人亚洲影院 | 午夜免费观看 | 九九激情视频 | 又色又爽又黄又免费的照片 | 国产一区二区三区视频播放 | a级黄色小说 | 国产午夜鲁丝片av无码 | 黄色片成人| 国产精品免费久久久久影院 | 天天狠天天插 | 青青青国产在线观看免费 | 人妻无码一区二区三区免费 | 亚洲精品国产一区二区的区别 | 热久久精| 丰满婷婷久久香蕉亚洲新区 | 肉色丝袜足j视频国产 | 精品国产乱码久久久久久丨区2区 | 中文字幕日韩视频 | 欧美黑人又粗又大又爽免费 | 国产毛片精品 | 香蕉久久人人爽人人爽人人片av | 国产剧情久久久 | 国产成人精品手机在线观看 | 成人影院yy111111在线观看 | 妹子干综合网 | 欧美香蕉爽爽人人爽 | 91福利视频在线 | 亚洲欧美国产高清va在线播放 | 精品二区在线观看 | 欧美日韩中文在线 | 91网站在线观看视频 | 极品尤物在线观看 | 在线观看中文字幕网站 | 狠狠色噜狠狠狠狠 | 日韩国产在线观看 | 偷拍女人私密按摩高潮视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 精品成人一区 | 二区国产| 天堂一区在线 | yy111111少妇影院免费观看 | 精品久久久久久久久久中文字幕 | 精品成人在线视频 | 夜夜爽夜夜叫夜夜高潮漏水 | 波多野结衣av高清一区二区三区 | 92av视频| 亚洲不卡高清视频 | 久久精品欧美一区二区 | 黄色大片久久 | 亚洲乱码国产乱码精品精不卡 | 91精品国产91久久综合 | 337p粉嫩大胆噜噜噜 | 这里只有精品视频在线观看 | 男人激烈吮乳吃奶视频 | 久久国产资源 | 男女爽爽| 天堂色区 | 超高清日韩aⅴ大片美女图片 | 国产成人手机视频 | 波霸ol色综合久久 | 四虎国产成人精品免费一女五男 | 韩国成人免费视频 | 白嫩少妇hdxxxⅹ性大陆 | 下面一进一出好爽视频 | 国产人与zoxxxx另类 | 毛片网站免费观看 | 亚洲人成在线播放网站 | 色小说综合| 8av国产精品爽爽ⅴa在线观看 | 欧美色图狠狠干 | 日韩免费专区 | 日本中文字幕在线视频 | 少妇啊灬啊别停灬用力啊免费视频 | 日本欧美久久久免费播放网 | 精品国产不卡一区二区三区 | 久久久久久久国产免费看 | 国产成人免费看一级大黄 | 九九久久精品国产 | 国产高清视频 | 国产欧美日韩在线观看 | 中文在线字幕观看 | 天天插天天搞 | 成人无码影片精品久久久 | 久久久国产精品人人片 | 国产无线乱码一区二三区 | 国产精品国产精品国产专区不卡 | 亚洲精品国偷拍自产在线观看 | 国产av永久无码天堂影院 | 日本熟妇色xxxxx欧美老妇 | 新呦u视频一区二区 | 五月激情婷婷丁香综合基地 | 色婷婷一区二区三区四区成人网 | 亚洲精品乱码久久久久久自慰 | 韩国三级久久 | 日韩视频网| 五月丁香色综合久久4438 | 无码性按摩 | 搡8o老女人老妇人老熟 | 亚洲综合精品香蕉久久网 | 免费观看的vr毛片 | 中文字幕老妇偷乱视频在线小说 | 亚洲玖玖玖 | 91成人免费看片 | 美女100%无挡 | 欧美成人高清 | 国产精品久久久久久福利 | 午夜激情久久 | 中文在线字幕免费观 | 少妇又色又紧又大爽又刺激 | 久草精品视频在线观看 | 精品国产一区二区三区久久久 | 777亚洲精品乱码久久久久久 | 亚洲成人精品 | 嫩草视频在线观看免费 | 免费观看av的网站 | 午夜精品久久久久久久久 | 怡红院av久久久久久久 | 国产精品久久久久久久久久尿 | 成人年无码av片在线观看 | 国产丰满农村老妇女乱 | 国产午夜毛片 | 在线网站av| 久久久男女 | 国产区福利 | 国产一级做a爰片久久毛片99 | 国产aaaaaaa | 黑人大长吊大战中国人妻 | 黄色国产网站 | 国产精品国产精品 | 最新版天堂资源中文官网 | 天天婷婷 | 99久re热视频这里只有精品6 | 一级做a免费 | 少妇高潮交换91 | 国产福利久久 | 美女无遮挡免费视频网站 | 天天爽 | 国产对白受不了了中文对白 | 亚洲精品国产一区黑色丝袜 | 妇女性内射冈站hdwww000 | 亚洲精品国产精品色诱一区 | √新版天堂资源在线资源 | 国产女人18毛片水真多18 | 波多野结衣免费一区视频 | 国产精选免费进入 | jizz亚洲女人高潮大叫 | 拔插拔插海外华人免费视频 | 色久综合网 | 欧美色图第一页 | 日韩免费高清 | 少妇又紧又色又爽又刺激视频 | 亚洲色偷偷偷综合网 | 天天综合天天做天天综合 | 日韩午夜小视频 | 亚洲无人区一区二区三区 | 大青草久久久蜜臀av久久 | 理论片中文字幕 | 亚洲国产精品无码观看久久 | 四川丰满妇女毛片四川话 | 欧美成在线观看 | 国产精品视频合集 | 亚洲精品在线观看免费 | av在线入口 | 大陆明星乱淫(高h)小说 | 美女网站污 | 羞羞答答国产xxdd亚洲精品 | 一区二区三区视频免费在线观看 | 欧美精品免费播放 | 人人草人人澡 | av网址免费 | 少妇做爰k8经典 | 一性一交一伦一色一按—摩 | 欧美亚洲韩国 | 少妇人妻大乳在线视频 | 国产人妻一区二区三区四区五区六 | 精品国产va久久久久久久 | 3344国产永久在线观看视频 | 美女毛片在线 | 国产欧美精品一区二区三区四区 | 含紧一点h边做边走动免费视频 | 国产农村乱子伦精品视频 | 欧洲grand老妇人bbw | 亚洲日本中文字幕 | aaa级吃奶摸下免费视频 | 999国产精品 | 五月婷婷六月合 | 日韩成人午夜 | 黄色毛片儿 | 国产人妻大战黑人20p | 成人欧美一区二区 | www.99在线| 国产制服91一区二区三区制服 | 日鲁鲁| 岛国av一区二区 | 久久精品www人人爽人人 | 成人亚洲一区二区 | 日韩性大片 | 香蕉国产在线视频 | 亚洲丰满熟女一区二区v | 超污网站在线看 | 91久久捆绑调教美女 | 亚洲女成人图区 | 亚洲激情成人 | 55夜色66夜色国产精品视频 | 青青草视频在线观看免费 | 国产成人高清在线 | 色婷婷激情网 | 欧美亚洲综合在线 | 欧美人与牲禽动a交精品 | 国产亚洲精品久久久久久网站 | 好吊色视频在线观看 |