asp.net 查询大数据量(百万条以上)如何快
不要在数据库里面进行排序啊什么的 这样很影响性能.
都放在程序里面进行 这样会好很多
而且你需要做语句的优化 不管是数据库的还是vs里面
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Data;
namespace ExcelTest
{
public class ExcelUtil
{
System.Data.DataTable table11 = new System.Data.DataTable();
public void ExportToExcel(System.Data.DataTable table, string saveFileName)
{
bool fileSaved = false;
//ExcelApp xlApp = new ExcelApp();
Application xlApp = new Application();
if (xlApp == null)
{
return;
}
Workbooks workbooks = xlApp.Workbooks;
Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];//取得sheet1
long rows = table.Rows.Count;
/*下边注释的两行代码当数据行数超过行时,出现异常:异常来自HRESULT:0x800A03EC。因为:Excel 2003每个sheet只支持最大行数据
//Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count+2, gridview.Columns.View.VisibleColumns.Count+1]);
//fchR.Value2 = datas;*/
if (rows > 65535)
{
long pageRows = 60000;//定义每页显示的行数,行数必须小于
int scount = (int)(rows / pageRows);
if (scount * pageRows < table.Rows.Count)//当总行数不被pageRows整除时,经过四舍五入可能页数不准
{
scount = scount + 1;
}
for (int sc = 1; sc <= scount; sc++)
{
if (sc > 1)
{
object missing = System.Reflection.Missing.Value;
worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(
missing, missing, missing, missing);//添加一个sheet
}
else
{
worksheet = (Worksheet)workbook.Worksheets[sc];//取得sheet1
}
string[,] datas = new string[pageRows + 1, table.Columns.Count+ 1];
for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}
Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;
int init = int.Parse(((sc - 1) * pageRows).ToString());
int r = 0;
int index = 0;
int result;
if (pageRows * sc >= table.Rows.Count)
{
result = table.Rows.Count;
}
else
{
result = int.Parse((pageRows * sc).ToString());
}
for (r = init; r < result; r++)
{
index = index + 1;
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式
}
}
}
Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 2, table.Columns.Count + 1]);
fchR.Value2 = datas;
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, table.Columns.Count]);
//15代表灰色
range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;
}
}
else
{
string[,] datas = new string[table.Rows.Count + 2, table.Columns.Count + 1];
for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}
Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;
int r = 0;
for (r = 0; r < table.Rows.Count; r++)
{
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式
}
}
//System.Windows.Forms.Application.DoEvents();
}
Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 2, table.Columns.Count + 1]);
fchR.Value2 = datas;
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 1, table.Columns.Count]);
//15代表灰色
range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;
}
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
fileSaved = true;
}
catch (Exception ex)
{
fileSaved = false;
}
}
else
{
fileSaved = false;
}
xlApp.Quit();
GC.Collect();//强行销毁
}
}
}
数据库的索引器,存储过程ap.net的2级缓存,界面的缓存
写个所引器
应该要用的数据结构里面的算法吧,折半查找
费桂新达: 数据库的索引器, 存储过程 ap.net的2级缓存, 界面的缓存
安溪县19261655857: 在ASP.NET中 当数据库数据量过百W的时候 应该怎样去提高数据库检索速度呢,最好保持在3秒? 我用了好多方法 包括entity框架 有高手帮我解决没?
费桂新达: 数据量百万 不可能都显示在页面上的...都是分页显示....现在的二分法查找速度挺快的......独立存储过程比拼接的会快
安溪县19261655857: asp.net几十万条以上的数据查询!如何高效率分页和查询显示! - ?
费桂新达: 1.使用存储过程分页.2.常用列,建立非聚集索引.ps:检查一下存储过程的效率.
安溪县19261655857: asp.net 查询超大数据量,怎样执行效率更快???
费桂新达: ASP.NET 的 GridView 控件、SqlDataSource 和 ObjectDataSource 控件,其内建的「数据分页 (pager)」功能,默认做法,是当 user 每次单击 GridView 的页码换页时,都重新去数据库里,把数据表的「所有」数据,「全部」重新 SELECT ...
安溪县19261655857: 数据库有上100万条数据时asp.net怎么样才能提高浏览速度? - ?
费桂新达: 如果是.NET 建议使用ADO.NET 在需要数据的时候才调用数据 而且脱机操作
安溪县19261655857: Asp.net +MySQL GridView 超大数据量?
费桂新达: 分页显示,每次读取一页数据,不要用GridView的分页,他是先全部读取出来再分页的,第一次会非常慢的;自己写一个分页,或者用AspNerPager分页工具
安溪县19261655857: ASP.NET大数据量处理 - ?
费桂新达: 不要在数据库里面进行排序啊什么的 这样很影响性能.都放在程序里面进行 这样会好很多 而且你需要做语句的优化 不管是数据库的还是vs里面
安溪县19261655857: asp.net 搜索比较慢? - ?
费桂新达: 是这样实现的.每个表中多增加一个Text字段,里面存放是前面所有字段的内容,在添加修改记录的时候,就把所有录入连接成一个字符串保存在这个字段里面了,搜索的时候也只搜索这个字段.但,根据你有很多表的情况.建议单独建个表,...
安溪县19261655857: asp中查询大量数据时怎样出来一个提示等待的页面?急需代码 求助!!! - ?
费桂新达: 在你内容显示页里适当位置加入loading图片,等数据取完之后取消图片就可以了.取值代码....开始取值同时加入loading图片.<SCRIPT language="javascript"> window.document.getElementById("img").innerHTML = "<img src='...
安溪县19261655857: asp.net 连接数据库 如何快速查询大量数据中的一条 - ?
费桂新达: 会写SQL查询语句吗?如:select * from tablename where id=3.意思为查询表名用tablename中id是3的那条记录.