请选择 进入手机版 | 继续访问电脑版

[MySql] MySQL 8中新增的这三大索引 埋伏 、降序、函数

[复制链接]
查看187 | 回复38 | 2021-9-12 23:18:43 | 显示全部楼层 |阅读模式
目次

MySQL 8中的隐蔽 、降序、函数索引

一、隐蔽 索引

1.隐蔽 索引概述

  • MySQL 8.0开始支持隐蔽 索引(invisible index),不可见索引。
  • 隐蔽 索引不会被优化器利用 ,但仍然 必要 举行 维护。
  • 应用场景:软删除、灰度发布。

在之前MySQL的版本中,只能通过显式的方式删除索引,假如 删除后发现索引删错了,又只能通过创建索引的方式将删除的索引添加回来,假如 数据库中的数据量非常大,或者表比较大,这种操作的成本非常高。

在MySQL 8.0中,只必要 将这个索引先设置为隐蔽 索引,使查询优化器不再利用 这个索引,但是,此时这个索引还是必要 MySQL后台举行 维护,当确认将这个索引设置为隐蔽 索引体系 不会受到影响时,再将索引彻底删除。这就是软删除功能。

灰度发布,就是说创建索引时,起首 将索引设置为隐蔽 索引,通过修改查询优化器的开关,使隐蔽 索引对查询优化器可见,通过explain对索引举行 测试,确认这个索引有用 ,某些查询可以利用 到这个索引,就可以将其设置为可见索引,完成灰度发布的效果 。

2.隐蔽 索引操作

(1)登录MySQL,创建testdb数据库,并在数据库中创建一张测试表t1

  1. mysql> create database if not exists testdb;
  2. Query OK, 1 row affected (0.58 sec)
  3. mysql> use testdb;
  4. Database changed
  5. mysql> create table if not exists t1(i int, j int);
  6. Query OK, 0 rows affected (0.05 sec)
复制代码

(2)在字段i上创建索引,如下所示。

  1. mysql> create index i_idx on t1(i);
  2. Query OK, 0 rows affected (0.34 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

(3)在字段j上创建隐蔽 索引,创建隐蔽 索引时,只必要 在创建索引的语句后面加上invisible关键字,如下所示

  1. mysql> create index j_idx on t1(j) invisible;
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

(4)查看t1表中的索引环境 ,如下所示

  1. mysql> show index from t1 \G
  2. *************************** 1. row ***************************
  3. Table: t1
  4. Non_unique: 1
  5. Key_name: i_idx
  6. Seq_in_index: 1
  7. Column_name: i
  8. Collation: A
  9. Cardinality: 0
  10. Sub_part: NULL
  11. Packed: NULL
  12. Null: YES
  13. Index_type: BTREE
  14. Comment:
  15. Index_comment:
  16. Visible: YES
  17. Expression: NULL
  18. *************************** 2. row ***************************
  19. Table: t1
  20. Non_unique: 1
  21. Key_name: j_idx
  22. Seq_in_index: 1
  23. Column_name: j
  24. Collation: A
  25. Cardinality: 0
  26. Sub_part: NULL
  27. Packed: NULL
  28. Null: YES
  29. Index_type: BTREE
  30. Comment:
  31. Index_comment:
  32. Visible: NO
  33. Expression: NULL
  34. 2 rows in set (0.02 sec)
复制代码

可以看到t1表中有两个索引,一个是i_idx,一个是j_idx,i_idx的Visible属性为YES,表示这个索引可见; j_idx的Visibles属性为NO,表示这个索引不可见。

(5)查看查询优化器对这两个索引的利用 环境 。

起首 ,利用 字段i举行 查询,如下所示。

  1. mysql> explain select * from t1 where i = 1 \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t1
  6. partitions: NULL
  7. type: ref
  8. possible_keys: i_idx
  9. key: i_idx
  10. key_len: 5
  11. ref: const
  12. rows: 1
  13. filtered: 100.00
  14. Extra: NULL
  15. 1 row in set, 1 warning (0.02 sec)
复制代码

可以看到,查询优化器会利用 i字段的索引举行 优化。
接下来,利用 字段j举行 查询,如下所示。

  1. mysql> explain select * from t1 where j = 1 \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t1
  6. partitions: NULL
  7. type: ALL
  8. possible_keys: NULL
  9. key: NULL
  10. key_len: NULL
  11. ref: NULL
  12. rows: 1
  13. filtered: 100.00
  14. Extra: Using where
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,查询优化器并没有利用 j字段上的隐蔽 索引,会利用 全表扫描的方式查询数据。

(6)使隐蔽 索引对优化器可见

在MySQL 8.x 中提供了一种新的测试方式,可以通过优化器的一个开关来打开某个设置,使隐蔽 索引对查询优化器可见。
查看查询优化器的开关,如下所示。

  1. mysql> select @@optimizer_switch \G
  2. *************************** 1. row ***************************
  3. @@optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=on,hash_join=on
  4. 1 row in set (0.00 sec)
复制代码

这里,可以看到如下一个属性值:

  1. use_invisible_indexes=off
复制代码

表示优化器是否利用 不可见索引,默以为 off不利用 。
接下来,在MySQL的会话级别使查询优化器利用 不可见索引,如下所示。

  1. mysql> set session optimizer_switch="use_invisible_indexes=on";
  2. Query OK, 0 rows affected (0.00 sec)
复制代码

接下来,再次查看查询优化器的开关设置,如下所示

  1. mysql> select @@optimizer_switch \G
  2. *************************** 1. row ***************************
  3. @@optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=on,skip_scan=on,hash_join=on
  4. 1 row in set (0.00 sec)
复制代码

此时,可以看到use_invisible_indexes=on,阐明 隐蔽 索引对查询优化器可见了。

再次分析利用 t1表的j字段查询数据,如下所示。

  1. mysql> explain select * from t1 where j = 1 \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t1
  6. partitions: NULL
  7. type: ref
  8. possible_keys: j_idx
  9. key: j_idx
  10. key_len: 5
  11. ref: const
  12. rows: 1
  13. filtered: 100.00
  14. Extra: NULL
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,此时查询优化器利用 j字段上的隐蔽 索引来优化查询了。

(7)设置索引的可见与不可见

将字段j上的隐蔽 索引设置为可见,如下所示。

  1. mysql> alter table t1 alter index j_idx visible;
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

将字段j上的索引设置为不可见,如下所示。

  1. mysql> alter table t1 alter index j_idx invisible;
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

(8)MySQL中主键不能设置为不可见索引

值得留意 的是:在MySQL中,主键是不可以设置为不可见的。
在testdb数据库中创建一张测试表t2,如下所示。

  1. mysql> create table t2(i int not null);
  2. Query OK, 0 rows affected (0.01 sec)
复制代码

接下来,在t2表中创建一个不可见主键,如下所示

  1. mysql> alter table t2 add primary key pk_t2(i) invisible;
  2. ERROR 3522 (HY000): A primary key index cannot be invisible
复制代码

可以看到,此时SQL语句报错,主键不能被设置为不可见索引。

二、降序索引

1.降序索引概述

  • MySQL 8.0开始真正支持降序索引(descending index)。
  • 只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。
  • MySQL 8.0不再对GROUP BY操作举行 隐式排序

2.降序索引操作

(1)MySQL 5.7中支持的语法

起首 ,在MySQL 5.7中创建测试数据库testdb,在数据库testdb中创建测试表t2,如下所示。

  1. mysql> create database if not exists testdb;
  2. Query OK, 0 rows affected (0.71 sec)
  3. mysql> use testdb;
  4. Database changed
  5. mysql> create table if not exists t2(c1 int, c2 int, index idx1(c1 asc, c2 desc));
  6. Query OK, 0 rows affected (0.71 sec)
复制代码

此中 ,在t2表中创建了名为idx1的索引,索引中c1字段升序排序,c2字段降序排序。

接下来,查看t2表的创建信息,如下所示

  1. mysql> show create table t2 \G
  2. *************************** 1. row ***************************
  3. Table: t2
  4. Create Table: CREATE TABLE `t2` (
  5. `c1` int(11) DEFAULT NULL,
  6. `c2` int(11) DEFAULT NULL,
  7. KEY `idx1` (`c1`,`c2`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
  9. 1 row in set (0.16 sec)
复制代码

可以看到,MySQL 5.7版本在创建表的信息中,没有字段c1和c2的排序信息,默认都是升序。

(2)MySQL 8.0中支持的语法

在MySQL 8.x中同样创建t2表,如下所示

  1. mysql> create table if not exists t2(c1 int, c2 int, index idx1(c1 asc, c2 desc));
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)
复制代码

接下来,查看t2表的创建信息,如下所示

  1. mysql> show create table t2 \G
  2. *************************** 1. row ***************************
  3. Table: t2
  4. Create Table: CREATE TABLE `t2` (
  5. `c1` int(11) DEFAULT NULL,
  6. `c2` int(11) DEFAULT NULL,
  7. KEY `idx1` (`c1`,`c2` DESC)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  9. 1 row in set (0.00 sec)
复制代码

可以看到,在MySQL 8.x中,创建的索引中存在字段的排序信息。

(3)MySQL 5.7中查询优化器对索引的利用 环境

起首 ,在表t2中插入一些数据,如下所示。

  1. mysql> insert into t2(c1, c2) values(1, 100), (2, 200), (3, 150), (4, 50);
  2. Query OK, 4 rows affected (0.19 sec)
  3. Records: 4 Duplicates: 0 Warnings: 0
复制代码

接下来,查询t2表中的数据,如下所示。

  1. mysql> select * from t2;
  2. +------+------+
  3. | c1 | c2 |
  4. +------+------+
  5. | 1 | 100 |
  6. | 2 | 200 |
  7. | 3 | 150 |
  8. | 4 | 50 |
  9. +------+------+
  10. 4 rows in set (0.00 sec)
复制代码

可以看到,t2表中的数据插入成功。

接下来,查看查询优化器对索引的利用 环境 ,这里,查询语句按照c1字段升序,按照c2字段降序,如下所示。

  1. mysql> explain select * from t2 order by c1, c2 desc \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t2
  6. partitions: NULL
  7. type: index
  8. possible_keys: NULL
  9. key: idx1
  10. key_len: 10
  11. ref: NULL
  12. rows: 4
  13. filtered: 100.00
  14. Extra: Using index; Using filesort
  15. 1 row in set, 1 warning (0.12 sec)
复制代码

可以看到,在MySQL 5.7中,按照c2字段举行 降序排序,并没有利用 索引。

(4)MySQL 8.x中查询优化器对降序索引的利用 环境 。

查看查询优化器对降序索引的利用 环境 。
起首 ,在表t2中插入一些数据,如下所示。

  1. mysql> insert into t2(c1, c2) values(1, 100), (2, 200), (3, 150), (4, 50);
  2. Query OK, 4 rows affected (0.00 sec)
  3. Records: 4 Duplicates: 0 Warnings: 0
复制代码

接下来,查询t2表中的数据,如下所示。

  1. mysql> select * from t2;
  2. +------+------+
  3. | c1 | c2 |
  4. +------+------+
  5. | 1 | 100 |
  6. | 2 | 200 |
  7. | 3 | 150 |
  8. | 4 | 50 |
  9. +------+------+
  10. 4 rows in set (0.00 sec)
复制代码

可以看到,t2表中的数据插入成功。

在MySQL中假如 创建的是升序索引,则指定查询的时间 ,只能按照升序索引的方式指定查询,如许 才能利用 升序索引。

接下来,查看查询优化器对索引的利用 环境 ,这里,查询语句按照c1字段升序,按照c2字段降序,如下所示。

  1. mysql> explain select * from t2 order by c1, c2 desc \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t2
  6. partitions: NULL
  7. type: index
  8. possible_keys: NULL
  9. key: idx1
  10. key_len: 10
  11. ref: NULL
  12. rows: 4
  13. filtered: 100.00
  14. Extra: Using index
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,在MySQL 8.x中,按照c2字段举行 降序排序,利用 了索引。

利用 c1字段降序,c2字段升序排序,如下所示。

  1. mysql> explain select * from t2 order by c1 desc, c2 \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t2
  6. partitions: NULL
  7. type: index
  8. possible_keys: NULL
  9. key: idx1
  10. key_len: 10
  11. ref: NULL
  12. rows: 4
  13. filtered: 100.00
  14. Extra: Backward index scan; Using index
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,在MySQL 8.x中仍然 可以利用 索引,并利用 了索引的反向扫描。

(5)MySQL 8.x中不再对GROUP BY举行 隐式排序

在MySQL 5.7中实行 如下下令 ,按照c2字段举行 分组,查询每组中数据的记录条数。

  1. mysql> select count(*), c2 from t2 group by c2;
  2. +----------+------+
  3. | count(*) | c2 |
  4. +----------+------+
  5. | 1 | 50 |
  6. | 1 | 100 |
  7. | 1 | 150 |
  8. | 1 | 200 |
  9. +----------+------+
  10. 4 rows in set (0.18 sec)
复制代码

可以看到,在MySQL 5.7中,在c2字段上举行 了排序操作。

在MySQL 8.x中实行 如下下令 ,按照c2字段举行 分组,查询每组中数据的记录条数。

  1. mysql> select count(*), c2 from t2 group by c2;
  2. +----------+------+
  3. | count(*) | c2 |
  4. +----------+------+
  5. | 1 | 100 |
  6. | 1 | 200 |
  7. | 1 | 150 |
  8. | 1 | 50 |
  9. +----------+------+
  10. 4 rows in set (0.00 sec)
复制代码

可以看到,在MySQL 8.x中,在c2字段上并没有举行 排序操作。

在MySQL 8.x中假如 必要 对c2字段举行 排序,则必要 利用 order by语句明确 指定排序规则,如下所示。

  1. mysql> select count(*), c2 from t2 group by c2 order by c2;
  2. +----------+------+
  3. | count(*) | c2 |
  4. +----------+------+
  5. | 1 | 50 |
  6. | 1 | 100 |
  7. | 1 | 150 |
  8. | 1 | 200 |
  9. +----------+------+
  10. 4 rows in set (0.00 sec)
复制代码

三、函数索引

1.函数索引概述

  • MySQL 8.0.13开始支持在索引中利用 函数(表达式)的值。
  • 支持降序索引,支持JSON数据的索引
  • 函数索引基于假造 列功能实现

2.函数索引操作

(1)创建测试表t3

在testdb数据库中创建一张测试表t3,如下所示。

  1. mysql> create table if not exists t3(c1 varchar(10), c2 varchar(10));
  2. Query OK, 0 rows affected (0.01 sec)
复制代码

(2)创建寻常 索引

在c1字段上创建寻常 索引

  1. mysql> create index idx1 on t3(c1);
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

(3)创建函数索引

在c2字段上创建一个将字段值转化为大写的函数索引,如下所示。

  1. mysql> create index func_index on t3 ((UPPER(c2)));
  2. Query OK, 0 rows affected (0.02 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

(4)查看t3表上的索引信息,如下所示。

  1. mysql> show index from t3 \G
  2. *************************** 1. row ***************************
  3. Table: t3
  4. Non_unique: 1
  5. Key_name: idx1
  6. Seq_in_index: 1
  7. Column_name: c1
  8. Collation: A
  9. Cardinality: 0
  10. Sub_part: NULL
  11. Packed: NULL
  12. Null: YES
  13. Index_type: BTREE
  14. Comment:
  15. Index_comment:
  16. Visible: YES
  17. Expression: NULL
  18. *************************** 2. row ***************************
  19. Table: t3
  20. Non_unique: 1
  21. Key_name: func_index
  22. Seq_in_index: 1
  23. Column_name: NULL
  24. Collation: A
  25. Cardinality: 0
  26. Sub_part: NULL
  27. Packed: NULL
  28. Null: YES
  29. Index_type: BTREE
  30. Comment:
  31. Index_comment:
  32. Visible: YES
  33. Expression: upper(`c2`)
  34. 2 rows in set (0.01 sec)
复制代码

(5)查看查询优化器对两个索引的利用 环境

起首 ,查看c1字段的大写值是否等于某个特定的值,如下所示。

  1. mysql> explain select * from t3 where upper(c1) = 'ABC' \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t3
  6. partitions: NULL
  7. type: ALL
  8. possible_keys: NULL
  9. key: NULL
  10. key_len: NULL
  11. ref: NULL
  12. rows: 1
  13. filtered: 100.00
  14. Extra: Using where
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,没有利用 索引,举行 了全表扫描操作。

接下来,查看c2字段的大写值是否等于某个特定的值,如下所示。

  1. mysql> explain select * from t3 where upper(c2) = 'ABC' \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t3
  6. partitions: NULL
  7. type: ref
  8. possible_keys: func_index
  9. key: func_index
  10. key_len: 43
  11. ref: const
  12. rows: 1
  13. filtered: 100.00
  14. Extra: NULL
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

可以看到,利用 了函数索引。

(6)函数索引对JSON数据的索引

起首 ,创建测试表emp,并对JSON数据举行 索引,如下所示。

  1. mysql> create table if not exists emp(data json, index((CAST(data->>'$.name' as char(30)))));
  2. Query OK, 0 rows affected (0.02 sec)
复制代码

上述SQL语句的表明 如下:

  • JSON数据长度不固定,假如 直接对JSON数据举行 索引,大概 会超出索引长度,通常,会只截取JSON数据的一部分举行 索引。
  • CAST()范例 转换函数,把数据转化为char(30)范例 。利用 方式为CAST(数据 as 数据范例 )。
  • data ->> '$.name'表示JSON的运算符

简单的明确 为,就是取name节点的值,将其转化为char(30)范例 。

接下来,查看emp表中的索引环境 ,如下所示。

  1. mysql> show index from emp \G
  2. *************************** 1. row ***************************
  3. Table: emp
  4. Non_unique: 1
  5. Key_name: functional_index
  6. Seq_in_index: 1
  7. Column_name: NULL
  8. Collation: A
  9. Cardinality: 0
  10. Sub_part: NULL
  11. Packed: NULL
  12. Null: YES
  13. Index_type: BTREE
  14. Comment:
  15. Index_comment:
  16. Visible: YES
  17. Expression: cast(json_unquote(json_extract(`data`,_utf8mb4\'$.name\')) as char(30) charset utf8mb4)
  18. 1 row in set (0.00 sec)
复制代码

(7)函数索引基于假造 列实现

起首 ,查看t3表的信息,如下所示。

  1. mysql> desc t3;
  2. +-------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-------+-------------+------+-----+---------+-------+
  5. | c1 | varchar(10) | YES | MUL | NULL | |
  6. | c2 | varchar(10) | YES | | NULL | |
  7. +-------+-------------+------+-----+---------+-------+
  8. 2 rows in set (0.00 sec)
复制代码

在c1上建立了寻常 索引,在c2上建立了函数索引。

接下来,在t3表中添加一列c3,模仿 c2上的函数索引,如下所示。

  1. mysql> alter table t3 add column c3 varchar(10) generated always as (upper(c1));
  2. Query OK, 0 rows affected (0.03 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

c3列是一个计算列,c3字段的值总是利用 c1字段转化为大写的效果 。

接下来,向t3表中插入一条数据,此中 ,c3列是一个计算列,c3字段的值总是利用 c1字段转化为大写的效果 ,在插入数据的时间 ,不必要 为c3列插入数据,如下所示。

  1. mysql> insert into t3(c1, c2) values ('abc', 'def');
  2. Query OK, 1 row affected (0.00 sec)
复制代码

查询t3表中的数据,如下所示。

  1. mysql> select * from t3;
  2. +------+------+------+
  3. | c1 | c2 | c3 |
  4. +------+------+------+
  5. | abc | def | ABC |
  6. +------+------+------+
  7. 1 row in set (0.00 sec)
复制代码

可以看到,并不必要 向c3列中插入数据,c3列的数据为c1字段的大写效果 数据。

假如 想模仿 函数索引的效果 ,则可以利用 如下方式。
起首 ,在c3列上添加索引,如下所示。

  1. mysql> create index idx3 on t3(c3);
  2. Query OK, 0 rows affected (0.11 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
复制代码

接下来,再次查看c1字段的大写值是否等于某个特定的值,如下所示。

  1. mysql> explain select * from t3 where upper(c1) = 'ABC' \G
  2. *************************** 1. row ***************************
  3. id: 1
  4. select_type: SIMPLE
  5. table: t3
  6. partitions: NULL
  7. type: ref
  8. possible_keys: idx3
  9. key: idx3
  10. key_len: 43
  11. ref: const
  12. rows: 1
  13. filtered: 100.00
  14. Extra: NULL
  15. 1 row in set, 1 warning (0.00 sec)
复制代码

此时,就利用 了idx3索引。

到此这篇关于MySQL 8中新增的这三大索引 隐蔽 、降序、函数的文章就先容 到这了,更多干系 MySQL 8中的隐蔽 、降序、函数索引内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 因为我是真真 | 2021-9-13 08:21:21 | 显示全部楼层
宇宙第一贴诞生了!
回复

使用道具 举报

avatar 云端午节 | 2021-9-15 22:19:32 | 显示全部楼层
admin楼主最近很消极啊!
回复

使用道具 举报

avatar 永远丶并不远 | 2021-9-16 03:58:33 | 显示全部楼层
admin楼主人气很旺!
回复

使用道具 举报

avatar 圣道 | 2021-9-23 00:53:51 | 显示全部楼层
青春不在了,青春痘还在!
回复

使用道具 举报

avatar 945坏男人 | 2021-9-28 01:56:41 | 显示全部楼层
管它三七二十一!
回复

使用道具 举报

avatar 千无情实 | 2021-9-28 18:17:53 | 显示全部楼层
今天是个特别的日子,值得纪念!
回复

使用道具 举报

avatar 123457276 | 2021-9-29 03:29:46 | 显示全部楼层
大神好强大!
回复

使用道具 举报

avatar 涨吧涨吧章 | 2021-9-29 03:29:49 | 显示全部楼层
admin楼主写的很经典!
回复

使用道具 举报

avatar 用户5592359840 | 2021-10-6 20:52:42 | 显示全部楼层
admin楼主给脑残下了定义!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则