SPL 性能优化基础练习
数据准备
使用到的数据表结构如下:
表 | 字段名 | 含义 |
---|---|---|
Categories | [CategoryID] [int] NOT NULL, [CategoryName] [nvarchar](50) NULL, [Description] [nvarchar](100) NULL |
分类 ID 分类名称 描述 |
Customers | [CustomerID] [nvarchar](10) NOT NULL, [CustomerName] [nvarchar](50) NOT NULL, [ContactName] [nvarchar](50) NULL, [ContactTitle] [nvarchar](50) NULL, [Address] [nvarchar](50) NULL, [City] [nvarchar](20) NULL, [Region] [nvarchar](20) NULL, [PostalCode] [nvarchar](20) NULL, [Country] [nvarchar](20) NULL, [Phone] [nvarchar](30) NULL, [Fax] [nvarchar](30) NULL |
客户 ID 客户名称 联系人 联系人头衔 客户地址 城市 地区 邮编 国家 电话 传真 |
Employees | [EmployeeID] [int] NOT NULL, [LastName] [nvarchar](50) NULL, [FirstName] [nvarchar](50) NULL, [Title] [nvarchar](50) NULL, [TitleOfCourtesy] [nvarchar](50) NULL, [Birthday] [date] NULL, [HireDate] [date] NULL, [Address] [nvarchar](50) NULL, [City] [nvarchar](50) NULL, [Region] [nvarchar](50) NULL, [PostalCode] [nvarchar](50) NULL, [Country] [nvarchar](50) NULL, [HomePhone] [nvarchar](50) NULL, [Gender] [nvarchar](50) NULL |
员工 ID 姓 名 头衔 尊称 生日 入职日期 地址 城市 地区 邮编 国家 家庭电话 性别 |
Orders | [CustomerID] [nvarchar](10) NULL, [OrderDate] [datetime] NULL, [ProductID] [nvarchar](50) NOT NULL, [Quantity] [int] NULL, [Unit] [nvarchar](50) NULL, [Price] [decimal](18, 2) NULL, [Amount] [decimal](18, 2) NULL, [EmployeeID] [int] NULL, [EmployeeName] [string] NULL, [ShipVia] [nvarchar](20) NULL |
客户编号 订单日期 产品编号 数量 单位 单价 金额 员工 ID 员工姓名 运输方式 |
Products | [ProductID] [nvarchar](50) NOT NULL, [ProductName] [nvarchar](50) NOT NULL, [SupplierID] [int] NULL, [CategoryID] [int] NULL, [QuantityPerUnit] [nvarchar](20) NULL, [UnitPrice] [decimal](18, 2) NULL |
产品编号 产品名称 供应商编号 分类编号 单位数量 单价 |
Suppliers | [SupplierID] [int] NOT NULL, [CompanyName] [nvarchar](50) NULL, [ContactName] [nvarchar](50) NULL, [ContactTitle] [nvarchar](50) NULL, [Address] [nvarchar](100) NULL, [City] [nvarchar](50) NULL, [Region] [nvarchar](50) NULL, [PostalCode] [nvarchar](50) NULL, [Country] [nvarchar](50) NULL, [Phone] [nvarchar](50) NULL, [Fax] [nvarchar](50) NULL, [HomePage] [nvarchar](100) NULL |
供应商 ID 供应商名称 联系人姓名 联系人头衔 地址 城市 地区 邮编 国家 电话 传真 网址 |
Areas | [Country] [nvarchar](50) NULL, [Region] [nvarchar](50) NULL, [City] [nvarchar](50) NULL, [CityName] [nvarchar](50) NULL, [PostalCode] [nvarchar](50) NULL |
国家 地区 城市 城市名称 邮编 |
表间关系图如下:
因数据库没有通用性,这里把测试数据以文本文件方式提供。小数据表直接用文件,大数据可以用下面的脚本生成。
目录
1 使用文件存储
1.1 集文件
1.2 组表
1.3 把日期变成小整数
1.4 把枚举字符串变成小整数
2 聚合理解
2.1 COUNT DISTINCT
2.2 DISTINCT
2.3 最大最小值所在的记录
2.4 前 N 名 / 后 N 名
2.5 前 N 名 / 后 N 名所在记录
2.6 冗余分组字段
2.7 每组第一 / 最后一条记录
3 有序存储
3.1 时间有序存储
3.2 有序过滤
3.3 帐户有序存储
3.4 有序 DISTINCT
3.5 有序 COUNT DISTINCT
3.6 有序分组统计
3.7 组内第一条 / 最后一条
3.8 组内复杂判断
4 外键维表
4.1 维表内存化
4.2 维表上的计算
4.3 宽表
4.4 序号化
4.5 维表过滤
4.6 对位序列
4.7 临时维表和区间维表
4.8 外存维表
5 主键关联
5.1 有序归并
5.2 计算交并集
5.3 用主表过滤子表
5.4 用子表过滤主表
英文版