mysql分表技术详解_mysql分表详解

本文探讨了MySQL中数据量大是否必须分表的问题,通过测试得出结论,数据量对查询速度影响较小,只要命中索引,查询依然快速。然而,分表的原因包括非索引操作多、模糊查询范围大、高并发操作、冷热数据分离等。文章介绍了水平分表(如取模分表和冷热数据分表)和垂直分表的策略,并讨论了分表的优缺点,建议数据量不大时不必分表。
摘要由CSDN通过智能技术生成

本人混迹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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值