SQL – 12.索引 + 13.join
索引# |
- 全表扫描:对数据进行检索(select)效率最差的是全表扫描,就是一条条的找。
- 如果没有目录,查汉语字典就要一页页的翻,而有了目录只要查询目录即可。为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录。
- 创建索引的方式,在表设计器中点击右键,选择“索引/键”→添加→在列中选择索引包含的列。
- 使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据的时候也需要同步更新索引,因此会降低Insert、Update、Delete的速度。只在经常检索的字段上(Where)创建索引。
- (*)即使创建了索引,仍然有可能全表扫描,比如like、函数、类型转换等。
索引:索引对经常select的字段查询提升速度(特别是数据量大的时候),但会降低Insert、Update、Delete的速度。即使创建了索引,仍然有可能全表扫描,比如like、函数、类型转换等。
JOIN# |
有客户表(T_Customers)和订单表(T_Orders)两个表,客户表字段为:Id、Name、Age,订单表字段为:Id、BillNo、CustomerId,订单表通过CustomerId关联客户表。测试数据见备注。
先建两张表,T_Customers和T_Orders
CREATE TABLE [T_Customers]( [Id] [int] NOT NULL, [Name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [Age] [int] NULL ); INSERT [T_Customers] ([Id], [Name], [Age]) VALUES (1, N'tom', 10); INSERT [T_Customers] ([Id], [Name], [Age]) VALUES (2, N'jerry', 15); INSERT [T_Customers] ([Id], [Name], [Age]) VALUES (3, N'john', 22); INSERT [T_Customers] ([Id], [Name], [Age]) VALUES (4, N'lily', 18); INSERT [T_Customers] ([Id], [Name], [Age]) VALUES (5, N'lucy', 18); CREATE TABLE [T_Orders]( [Id] [int] NOT NULL, [BillNo] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [CustomerId] [int] NULL); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (1, N'001', 1); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (2, N'002', 1); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (3, N'003', 3); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (4, N'004', 2); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (5, N'005', 2); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (6, N'006', 5); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (7, N'007', 4); INSERT [T_Orders] ([Id], [BillNo], [CustomerId]) VALUES (8, N'008', 5);
SELECT o.BillNo,c.Name,c.Age from T_Orders as o
JOIN T_Customers as c on o.CustomerId=c.Id
问题:要求显示所有年龄大于15岁的顾客购买的订单号、客户姓名、客户年龄。
SELECT o.BillNo,c.Name,c.Age from T_Orders as o JOIN T_Customers as c on o.CustomerId=c.Id where c.Age>15
要求显示年龄大于平均年龄的顾客购买的订单
select o.BillNo,c.Name,c.Age from T_Orders as o join T_Customers as c on o.CustomerId=c.Id where c.Age>(select AVG(Age) from T_Customers)
作者:【唐】三三
出处:https://www.cnblogs.com/tangge/archive/2012/08/21/2648698.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具