10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
来源:互联网 发布:数据库实体是什么 编辑:程序博客网 时间:2024/05/23 01:50
背景
工作快2个月了,日子过的真快啊。
时间真的有魔力,曾经觉得那么变态的sql语句,现在竟然觉得那么可爱(才怪)。 从刚开始的十几行的sql就觉得很长,到现在的100多行还感觉长的很正常很有道理,鬼知道我经历了什么。。。
废话不多说了,进入正题。
笔者在工作中,测试坏境下运行非常快的代码,到了正式坏境下慢了很多,原因是正式数据库数据量比较大的原因。又因为sql语句也很长了,所以考虑一下是否要用建立视图的方法来替换。今天呢就测试一下 对于同样的查询来说,使用sql语句和建立视图查询这两种方法哪一个效率高。
实验准备
我们就拿这样一个任务来测试:数据库表只有2个字段,要求读取拼接后的值。 (拼接 模拟了真实情况下大量的预处理和计算)
开始了。
建立一个新表
根据任务要求建立它的视图
插入20w条数据
SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;user=sa;pwd=yourpwd;database=VS"; cn.Open(); SqlCommand cmd = new SqlCommand(); for(int i=0;i<200000;i++) { cmd.Connection = cn; cmd.CommandText = "insert into SqlOrView values ('"+i.ToString()+"','"+i.ToString()+"')"; cmd.ExecuteNonQuery(); } Console.WriteLine("insert 20w data end..."); Console.Read();
可以看到数据库中显示20w条
接下来是真正的测试了:通过两种方式读取,并计算花费的时间:
static void Main(string[] args) { SearchBySql(); SearchByView(); Console.Read(); } static void SearchBySql() { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;user=sa;pwd=yourpwd;database=VS"; cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "select (id + name) as name from SqlOrView"; DateTime dt1 = DateTime.Now; cmd.ExecuteNonQuery(); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt1); Console.WriteLine( "by sql :" + ts.ToString()); } static void SearchByView() { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;user=sa;pwd=yourpwd;database=VS"; cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "select * from MyView"; DateTime dt1 = DateTime.Now; cmd.ExecuteNonQuery(); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt1); Console.WriteLine("by view :"+ts.ToString()); Console.Read(); }
第一次:
by sql :00:00:00.0670497by view :00:00:00.0569991
额,貌似时间有点太短了,我们就多读几次好了,再来,这次是查100次
static void Main(string[] args) { double sqlTime = 0; double viewTime = 0; for(int i=0;i<100;i++) { sqlTime+=SearchBySql(); viewTime += SearchByView(); } Console.WriteLine("sqltime=" + sqlTime.ToString()); Console.WriteLine("viewtime=" + viewTime.ToString()); Console.Read(); } static double SearchBySql() { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;user=sa;pwd=1111;database=VS"; cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "select (id + name) as name from SqlOrView"; DateTime dt1 = DateTime.Now; cmd.ExecuteNonQuery(); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt1); return ts.TotalMilliseconds; } static double SearchByView() { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "server=.;user=sa;pwd=11111;database=VS"; cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "select * from MyView"; DateTime dt1 = DateTime.Now; cmd.ExecuteNonQuery(); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt1); return ts.TotalMilliseconds; }
结果差不多爱。
sqltime=5945.0078viewtime=5945.6799
结论
纯sql 和 视图 ,两种方式查询花费时间几乎一样的,而且从理论上讲纯sql会快一点点,因为视图查询时也是重新执行一遍视图创建时的sql语句。
阅读全文
0 0
- 10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
- sql语句的优化分析之一查询语句中左连接和函数效率分析比较
- sqlserver 视图和sql语句的效率对比
- WITH语句,有效加快大数据量下的查询效率
- mysql处理上百万条的数据库如何优化语句来提高处理查询效率
- Oracle 10g SQL分页查询语句和效率分析
- SQL Server中的视图和查询语句的异同
- 查询和视图的比较
- 提高sql语句查询效率的方法
- 怎样提高sql语句的查询效率
- 如何优化操作大数据量数据库(几十万以上数据)(二。改善SQL语句)
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- 按月、周、日查询统计数据量的sql语句
- SQL server 2005查询数据库表的数量和表的数据量
- 纯SQL语句循环查询
- sql 分页查询效率比较..
- 针对大数据量查询效率的经验
- Spring boot源码分析-SpringApplication启动(1)
- android-crackme-challenge write-up
- MATLAB中图像处理后imshow()将一幅图像显示为3幅图像的原因和解决办法
- 判断只能输入包含(中文,数字,英文)的正则表达式。
- 从新镜像启动容器
- 10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
- Leetcode 139. Word Break I&&II
- CentOS安装phpMyAdmin笔记
- while(t--)和while(--t)的区别
- FZU 1759 Super A^B mod C
- python 嵌入 C/C++方法
- jdk1.6 1.7 1.8 运行时常量池位置的变化
- SpringMVC概述和注解
- NOIP 2014 联合权值