加载大型 SQL 表的最快方法

问题描述

我正在制作一个用户显示数据的 ASP.NET 网站。它查询 sql 数据库获取该数据,然后将其显示在浏览器中。这些表通常有 100 万行以上,加载需要一些时间。而不是用户必须等待那么长时间才能查看页面,我希望页面加载,然后在加载数据时将数据添加页面中。我可以用 SignalR 实现这一点,但我的问题是:

在C#中,有没有办法说“select * from tableName”,但是让它一一返回行,这是加载数据的最快方式吗?

解决方法

完成此操作的最简单方法可能是创建一个通过 Ajax 异步调用的服务器端方法,并将其加载到表中。这样加载视图的操作不依赖于表加载,并且表记录将在它们进入时加载。 另外,如果数据变化不是很频繁,可以考虑缓存它,使后续页面加载速度更快。

,

SignalR 适用于这种情况,从 db 加载大型数据集时有两点。

  1. 切勿使用 *,而是为您想要的每个列命名。
  2. 您可以先获取表中记录的数量,然后根据批量大小进行提取。例如,您在 DB 中有 1000 条记录,您的批次大小为 100。因此您将向 DB 发出 10 次请求以获取所有 1000 个元素。
,

您可以选择按页面列出,这有助于加载,

  <template>
 <div>
  <input type="text" placeholder="Source client" v-model="query" v-on:keyup="autoComplete" @keydown.esc="clearText" class="form-control">
  <div class="panel-footer" v-if="results.length">
   <ul class="list-group">
    <li class="list-group-item" v-for="result in results">
   <span> {{ result.name + "-" + result.oid }} </span>
    </li>
   </ul>
  </div>
 </div>
</template>
<script>
import axios from 'axios'
 export default{
  data(){
   return {
    selected: '',query: '',results: []
   }
  },methods: {

  
    clearText(){
        this.query = ''
    },autoComplete(){
    this.results = [];
    if(this.query.length > 2){
     axios.get('/getclientdata',{params: {query: this.query}}).then(response => {
      this.results = response.data;
     });
    }
   }
  }
 }
</script>

如果您可以减少要加载的数据量,那将是最好的,就我而言,我进行了“选择”以仅加载具有特定值的行

   string searchString

   if (searchString != null)
   {
       page = 1;
   }
   else
   {
       searchString = currentFilter;
   }

   ViewBag.CurrentFilter = searchString;

   int pageSize = 5;
   int pageNumber = (page ?? 1);
   return View(Users.ToPagedList(pageNumber,pageSize));