2019年5月

准备测试用例

CREATE TABLE `tb_orders_10w` (
  `order_id` bigint(20) NOT NULL COMMENT '订单自增id',
  `order_no` bigint(20) NOT NULL COMMENT '外部订单号',
  `uid` bigint(20) NOT NULL COMMENT '所属用户id',
  `sender_name` varchar(64) DEFAULT '' COMMENT '发件人',
  `sender_mobile` varchar(20) DEFAULT NULL COMMENT '发件人手机',
  `sender_province` varchar(10) DEFAULT '' COMMENT '发件人省',
  `sender_city` varchar(20) DEFAULT '' COMMENT '发件人市',
  `sender_district` varchar(20) DEFAULT '' COMMENT '发件人区',
  `sender_address` varchar(255) DEFAULT '' COMMENT '发件人详细地址',
  `receiver_name` varchar(64) NOT NULL DEFAULT '' COMMENT '收件人名字',
  `receiver_mobile` varchar(20) DEFAULT '' COMMENT '收件人手机',
  `receiver_province` varchar(10) NOT NULL DEFAULT '' COMMENT '收件人省',
  `receiver_city` varchar(20) NOT NULL DEFAULT '' COMMENT '收件人市',
  `receiver_district` varchar(20) NOT NULL DEFAULT '' COMMENT '收件人区',
  `receiver_address` varchar(255) NOT NULL DEFAULT '' COMMENT '收件人详细地址',
  `status` tinyint(1) DEFAULT '0' COMMENT '订单状态:\r\n0未发货,1已取消,\r\n2已发货(有单号),3已完成(有单号)',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';

脚本插入10万条数据。

mysql> SELECT count(*) as cnt FROM tb_orders_10w;
+--------+
| cnt    |
+--------+
| 100000 |
+--------+
1 row in set (0.03 sec)

mysql> 

需求是要随机返回10个订单的 sender_name 。

- 阅读剩余部分 -

1. 停止服务

[root@iZuf6iv3q5dy5wx3gt2oxuZ ~]# service mysql stop
Shutting down MySQL....                                    [  OK  ]
[root@iZuf6iv3q5dy5wx3gt2oxuZ ~]# ps aux|grep mysql
root      6496  0.0  0.0 103312   872 pts/1    S+   17:28   0:00 grep mysql
    

2. 修改配置文件

vi /etc/my.cnf
搜索 [mysqld]
栏目下加入一行 skip-grant-tables

- 阅读剩余部分 -

mysql查询过程

客户端发送一条sql给mysql服务器, 经历了连接器、查询缓存、解析器、预处理器、执行器,最后拿到结果返回给客户端。

image

下面是具体内容:(以下演示基于MySQL5.7.24)

- 阅读剩余部分 -

背景

我使用以下命令在8.0版本MySQL来创建了一个新用户:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.11    |
+-----------+
1 row in set (0.01 sec)

mysql> CREATE USER yhy IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.17 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'yhy';
Query OK, 0 rows affected (0.08 sec)

系统提示我Query OK。

- 阅读剩余部分 -