Mysql查询(基于某酒店2000w条数据)

博主通过分析2000万条酒店开房记录数据,探讨了MySQL的性能问题,尤其是使用LIMIT关键字时的瓶颈。文章讨论了如何改进索引策略,以提高模糊查询和LIMIT查询的效率,包括创建复合索引,并分享了最终的建表语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、仅仅是学习

前阵子手贱,下载网上流传的某酒店2000w开房记录,顺手就给下载了。下载cvs格式,导入数据时好多失败,随后下载Sql-Server-2008-R2版本的记录,由于模糊查询非常慢,就开始改造mysql版本的(注:SQL-Server不熟而且太占内存了,4G的基本跑起来比较费力)。贴上SQL-Server的建表语句:

CREATE TABLE [dbo].[cdsgus](
    [Name] [nvarchar](2000) NULL,
    [CardNo] [nvarchar](2000) NULL,
    [Descriot] [nvarchar](2000) NULL,
    [CtfTp] [nvarchar](2000) NULL,
    [CtfId] [nvarchar](2000) NULL,
    [Gender] [nvarchar](2000) NULL,
    [Birthday] [nvarchar](2000) NULL,
    [Address] [nvarchar](2000) NULL,
    [Zip] [nvarchar](2000) NULL,
    [Dirty] [nvarchar](2000) NULL,
    [District1] [nvarchar](2000) NULL,
    [District2] [nvarchar](2000) NULL,
    [District3] [nvarchar](2000) NULL,
    [District4] [nvarchar](2000) NULL,
    [District5] [nvarchar](2000) NULL,
    [District6] [nvarchar](2000) NULL,
    [FirstNm] [nvarchar](2000) NULL,
    [LastNm] [nvarchar](2000) NULL,
    [Duty] [nvarchar](2000) NULL,
    [Mobile] [nvarchar](2000) NULL,
    [Tel] [nvarchar](2000) NULL,
    [Fax] [nvarchar](2000) NULL,
    [EMail] [nvarchar](2000) NULL,
    [Nation] [nvarchar](2000) NULL,
    [Taste] [nvarchar](2000) NULL,
    [Education] [nvarchar](2000) NULL,
    [Company] [nvarchar](2000) NULL,
    [CTel] [nvarchar](2000) NULL,
    [CAddress] [nvarchar](2000) NULL,
    [CZip] [nvarchar](2000) NULL,
    [Family] [nvarchar](2000) NULL,
    [Version] [nvarchar](2000) NULL,
    [id] [int] IDENTITY(1,1) NOT NULL,
    CONSTRAINT [PK_cdsgus] PRIMARY KEY CLUSTERED ([id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

从建表语句看,这表建得实在是不太好!不管,先看看数据有多少:

select COUNT(*) FROM [shifenzheng].[dbo].[cdsgus]; # 查询非常慢的(5分钟左右)

2、开始MySql之旅 

开始导入数据(开始mysql建表语句也和上面一样),然后几经折腾,最终确定表结构如下(内存不够,放弃ENGINE=MEMORY):
mysql> show create table customer;
+--------------------------+
| Table    | Create Table   
+--------------------------+
| customer | CREATE TABLE `customer` (
  `Name` varchar(80) NOT NULL,
  `CardNo` varchar(10) DEFAULT NULL,
  `Descriot` varchar(100) DEFAULT NULL,
  `CtfTp` varchar(4) DEFAULT NULL,
  `CtfId` varchar(40) DEFAULT NULL,
  `Gender` varchar(8) DEFAULT NULL,
  `Birthday` int(9) DEFAULT NULL,
  `Address` varchar(100) DEFAULT NULL,
  `Zip` int(10) DEFAULT NULL,
  `Dirty` varchar(20) DEFAULT NULL,
  `District1` varchar(6) DEFAULT NULL,
  `District2` varchar(4) DEFAULT NULL,
  `District3` varchar(6) DEFAULT NULL,
  `District4` varchar(6) DEFAULT NULL,
  `District5` varchar(8) DEFAULT NULL,
  `District6` varchar(20) DEFAULT NULL,
  `FirstNm` varchar(50) DEFAULT NULL,
  `LastNm` varchar(20) DEFAULT NULL,
  `Duty` varchar(20) DEFAULT NULL,
  `Mobile` varchar(40) DEFAULT NULL,
  `Tel` varchar(40) DEFAULT NULL,
  `Fax` varchar(40) DEFAULT NULL,
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值