本人混迹qq群2年多了,经常听到有人说“数据表太大了,需要分表”,“xxxx了,要分表”的言论,那么,到底为什么要分表?
难道数据量大就要分表?
mysql数据量对索引的影响
本人mysql版本为5.7
新增数据测试
为了测试mysql索引查询是否和数据量有关,本人做了以下的测试准备:
新建4个表article1,article2,article3,article4,article5 每个表分别插入20万,50万,100万,200万,1500万的数据,数据都是随机生成create table test.article1(
id int auto_increment comment 'id'
primary key,
user_id int not null comment '用户id',
title varchar(64) not null comment '标题',
add_time datetime null comment '新增时间',
update_time int null comment '更新时间',
description varchar(255) null comment '简介',
status tinyint(1) null comment '状态 1正常 0隐藏'
)
charset = utf8;
create index article_title_index
on test.article1 (title);
生成数据脚本,使用easyswoole,多协程插入:<?php
include "./vendor/autoload.php";
\EasySwoole\EasySwoole\Core::getInstance()->initialize();
for ($i = 0; $i <= 2000; $i++) {//协程最多3000,创建1000个协程
go(function () use ($i) {
\App\Utility\Pool\MysqlPool::invoke(function (\App\Utility\Pool\MysqlPoolObject $mysqlObject) use ($i) {
for ($y = 0; $y <= 1000; $y++) {//每个协程插入100条数据
$data = [
'user_id' => mt_rand(1, 2500),
'title' => \EasySwoole\Utility\Random::character(32),//随机生成32位字母的标题
'add_time' => date('Y-m-d H:i:s', mt_rand(strtotime('2018-01-01'), strtotime('2019-01-01'))),//随机生成日期
'update_time' => mt_rand(strtotime('2018-01-01'), strtotime('2019-01-01')),//随机生成日期
'description