MySQL快速生成大量测试数据(100万、1000万、1亿)

MySQL快速生成大量测试数据(100万、1000万、1亿),第1张

LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。

下面是LEFT()函数的语法 -

INTERVAL关键字

INTERVAL关键字可以用于计算时间间隔,可以有以下用法。

1,直接计算时间间隔。

例1:查询当前时间之前2个小时的日期:

MySQL DATE_ADD() 函数

定义和用法

DATE_ADD() 函数向日期添加指定的时间间隔。

语法

DATE_ADD(date,INTERVAL expr type)

我们希望向 "OrderDate" 添加 2 天

DATE_ADD(OrderDate,INTERVAL 2 DAY)

CAST函数 将任何类型的值转换为具有指定类型的值 https://www.yiibai.com/mysql/cast.html

rand() 的取值范围为[0,1)

tinyint字段举例 unsigned 字段的取值范围是0-255,而 signed 的范围是-128 - 127

SECOND

对于查询处理,可将其分为逻辑查询处理和物理查询处理。逻辑查询处理表示执行查询应该产生什么样的结果,而物理查询代表MySQL数据库是如何得到结果的。

逻辑查询处理

MySQL真正的执行顺序如下:

(8)SELECT (9)DISTINCT<select_list>

(1)FROM <left_table>

(3)<join_type>JOIN<right_table>

(2) ON <join_condition>

(4)WHERE <where_condition>

(5)GROUP BY <group_by_list>

(6)WITH {CUBE|ROLLUP}

(7)HAVING<having_condition>

(10)ORDER BY<order_by_list>

(11)LIMIT <limit_number>

FORM:对FORM子句中的左表<left_table >和右表 <right_table >执行笛卡儿积,产生虚拟表VT1。

ON:对虚拟表VT1应用ON筛选,只有那些符合<join_condition >的行才被插入到虚拟表VT2中。

JOIN:如果指定了OUTER JOIN,那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果FROM字句包含两个以上表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表为止。

WHERE:对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition >的记录才被插入到虚拟表VT4中。

GROUP BY:根据GROUP BY子句中的列,对VT4中的记录进行分组 *** 作,产生虚拟表VT5.

CUBE|ROLLUP:对虚拟表VT5进行 CUBE或ROLLUP,产生VT6.

HAVING:对虚拟表VT6应用HAVING过滤器,只有符合<having_condition >的记录才能被插入虚拟表VT7.

SELECT:第二次执行SELECT *** 作,选择指定的咧,插入到虚拟表VT8。

DISTINCT:去除重复数据,产生虚拟表VT9。

ORDER BY:将虚拟表VT9中的记录按照<order_by_list >进行排序 *** 作,产生虚拟表VT10。

LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户。

物理查询处理

上面是逻辑查询处理,但是数据库也许并不会按照逻辑查询处理的方式进行查询。MySQL数据库层有Parser和Optimizer两个组件。Parser的工作就是分析SQL语句,而Optimizer的工作就是对这个SQL语句进行优化,选择一条最优的路径来选取数据,但是必须保证物理查询处理的最终结果和逻辑查询处理的结果是相等的。

如果表上建有索引,那么优化器就会判断SQL语句是否可以利用该索引来进行优化。如果没有可以利用的索引,可能整个SQL语句的执行代价非常大。

假设表A和表B都是有10万行数据,并且两个表都没有索引,因此最终SQL解析器解析的执行结果为逻辑处理的步骤,共经过11个步骤来进行数据的查询。最终根据笛卡尔积生成一张虚表VT1,共100亿行数据,执行这条SQL语句一般的电脑至少得跑一个多小时。

然而,如果这时候表B上添加一个主键值,在执行这条SQL语句,那么只需话费1秒。促使这个查询时间大幅减少的原因就是添加索引后避免了笛卡儿积表的产生。

物理查询会根据索引来进行优化。

1、数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是逐渐,vtype是tinyint,vtype是索引。这是一个基本的新闻系统的简单模型。现在往里面填充数据,填充10万篇新闻。 

2、最后collect 为 10万条记录,数据库表占用硬盘1.6G。OK ,看下面这条sql语句:select id,title from collect limit 1000,10很快;基本上0.01秒就OK,再看下面的select id,title from collect limit 90000,10从9万条开始分页。

3、8-9秒完成。

4、看下面一条语句:select id from collect order by id limit 90000,10很快,0.04秒就OK。因为用了id主键做索引当然快。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7678714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存