http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3907|回复: 3

[Access] 请教怎么优化我的数据库查询模块?

[复制链接]
发表于 2013-3-31 17:28:45 | 显示全部楼层 |阅读模式
       请教一下,我遍历access数据库中点表共9W多个坐标数据,然后用它们计算是否在给定的范围中,再用在范围中的点在线表中获取到包含它们的线的名称,用了1分30秒,我感觉用了好长时间。因为我还要用我查询到的数据生成一个数据库,如果范围再大点,就更费时间了,请指点一下怎么提高效率?

/// <summary>
        /// 获取所有含指定管线点名的管线标识码
        /// </summary>
        /// <param name="connection">一个打开连接的数据库</param>
        /// <param name="pesName">管线点名</param>
        /// <param name="pesStyleName">管类名</param>
        /// <param name="pointTableHz">管线点表后缀名称</param>
        /// <param name="lineTableHz">管线线表后缀名称</param>
        /// <param name="indexName">标识码字段名称</param>
        /// <param name="startCodeName">管线起点名字段名称</param>
        /// <param name="endCodeName">管线终点名字段名称</param>
        /// <param name="pesPointCodeName">管线点字段名称</param>
        /// <returns>返回所有包含指定管线点名的管线标识码</returns>
        public static int[] GetPesLineIndexFromPesPointNames(OleDbConnection connection, string pesName, string pesStyleName, string pointTableHz, string lineTableHz,
                                                              string indexName, string startCodeName, string endCodeName, string pesPointCodeName)
        {
            //创建所有起点或终点包含指定管线点的线选择集语句
            string lineSqlStr = "select " + indexName + " from " + pesStyleName + lineTableHz + " where " + startCodeName + "='" + pesName + "' union all " +
                                "select " + indexName + " from " + pesStyleName + lineTableHz + " where " + endCodeName + "='" + pesName + "'" ;

            OleDbCommand command = new OleDbCommand(lineSqlStr, connection);
             OleDbDataReader oledDbDrLine = command.ExecuteReader();
             List<int> indexLst = new List<int>();
            while (oledDbDrLine.Read())
            {
                indexLst.Add(Convert.ToInt32(oledDbDrLine[indexName].ToString()));
            }
            oledDbDrLine.Close();
            return indexLst.ToArray();
        }






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-1 10:34:23 | 显示全部楼层
[code=csharp]    string lineSqlStr = "select " + indexName + " from " + pesStyleName + lineTableHz + " where " + startCodeName + "='" + pesName + "' union all " +
                                "select " + indexName + " from " + pesStyleName + lineTableHz + " where " + endCodeName + "='" + pesName + "'" ;[/code]

楼主这种写法看上去基本没有什么问题,查询时主要是使用了条件endCodeName ,startCodeName字段,是不是可以直接写成一条
where endCodeName =pesNa and  startCodeName=pesNa 另外,在处理一下这两个字段的索引,相信速度应该能提到5秒以内的。


 楼主| 发表于 2013-4-2 15:37:59 | 显示全部楼层
站长苏飞 发表于 2013-4-1 10:34
楼主这种写法看上去基本没有什么问题,查询时主要是使用了条件endCodeName ,startCodeName字段,是不是 ...

不能用and 因为endCodeName ,startCodeName的值不可能同时出现在一条数据中。我一直不知道怎么运用索引,请教怎么运用!
发表于 2013-4-2 15:41:29 | 显示全部楼层
Yxrwendao 发表于 2013-4-2 15:37
不能用and 因为endCodeName ,startCodeName的值不可能同时出现在一条数据中。我一直不知道怎么运用索引, ...

http://www.sufeinet.com/thread-419-1-1.html
这是一个说明,具体的用法,你查查资料就行了,或者是直接看我的Sql教程里面也有相关代码。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-22 09:53

© 2014-2021

快速回复 返回顶部 返回列表