精华内容
下载资源
问答
  • 本文中列举了一个P2P应用开发实例,实例中使用了MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效,下文中列举了使用过程中提高效率的三个有效的尝试。...

    MySQL数据库由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.本文中列举了一个P2P应用开发实例,实例中使用了MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效,下文中列举了使用过程中提高效率的三个有效的尝试。

    使用statement进行绑定查询

    使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合.

    使用方法是:

    绑定, 创建一个MYSQL_STMT变量,与对应的查询字符串绑定,字符串中的问号代表要传入的变量,每个问号都必须指定一个变量.

    查询, 输入每个指定的变量, 传入MYSQL_STMT变量用可用的连接句柄执行.

    代码如下:

    //1.绑定

    bool CDBManager::BindInsertStmt(MYSQL * connecthandle)

    {

    //作插入操作的绑定

    MYSQL_BIND insertbind[FEILD_NUM];

    if(m_stInsertParam == NULL)

    m_stInsertParam = new CHostCacheTable;

    m_stInsertStmt = mysql_stmt_init(connecthandle);

    //构建绑定字符串

    char insertSQL[SQL_LENGTH];

    strcpy(insertSQL, "insert into HostCache(SessionID, ChannelID, ISPType, "

    "ExternalIP, ExternalPort, InternalIP, InternalPort) "

    "values(?, ?, ?, ?, ?, ?, ?)");

    mysql_stmt_prepare(m_stInsertStmt, insertSQL, strlen(insertSQL));

    int param_count= mysql_stmt_param_count(m_stInsertStmt);

    if(param_count != FEILD_NUM)

    return false;

    //填充bind结构数组, m_sInsertParam是这个statement关联的结构变量

    memset(insertbind, 0, sizeof(insertbind));

    insertbind[0].buffer_type = MYSQL_TYPE_STRING;

    insertbind[0].buffer_length = ID_LENGTH /* -1 */;

    insertbind[0].buffer = (char *)m_stInsertParam->sessionid;

    insertbind[0].is_null = 0;

    insertbind[0].length = 0;

    insertbind[1].buffer_type = MYSQL_TYPE_STRING;

    insertbind[1].buffer_length = ID_LENGTH /* -1 */;

    insertbind[1].buffer = (char *)m_stInsertParam->channelid;

    insertbind[1].is_null = 0;

    insertbind[1].length = 0;

    insertbind[2].buffer_type = MYSQL_TYPE_TINY;

    insertbind[2].buffer = (char *)&m_stInsertParam->ISPtype;

    insertbind[2].is_null = 0;

    insertbind[2].length = 0;

    insertbind[3].buffer_type = MYSQL_TYPE_LONG;

    insertbind[3].buffer = (char *)&m_stInsertParam->externalIP;

    insertbind[3].is_null = 0;

    insertbind[3].length = 0;

    insertbind[4].buffer_type = MYSQL_TYPE_SHORT;

    insertbind[4].buffer = (char *)&m_stInsertParam->externalPort;

    insertbind[4].is_null = 0;

    insertbind[4].length = 0;

    insertbind[5].buffer_type = MYSQL_TYPE_LONG;

    insertbind[5].buffer = (char *)&m_stInsertParam->internalIP;

    insertbind[5].is_null = 0;

    insertbind[5].length = 0;

    insertbind[6].buffer_type = MYSQL_TYPE_SHORT;

    insertbind[6].buffer = (char *)&m_stInsertParam->internalPort;

    insertbind[6].is_null = 0;

    insertbind[6].is_null = 0;

    //绑定

    if (mysql_stmt_bind_param(m_stInsertStmt, insertbind))

    return false;

    return true;

    }

    展开全文
  • MySQL数据库由于它本身的小巧和操作的高效, 在数据库...以下是我在使用过程中做的提高效率的有效的尝试.希望对大家能够有所帮助。使用statement进行绑定查询使用statement可以提前构建查询语法树,在查询时不再需要构...

    MySQL数据库由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的有效的尝试.希望对大家能够有所帮助。

    使用statement进行绑定查询

    使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合.

    使用方法是:

    绑定, 创建一个MYSQL_STMT变量,与对应的查询字符串绑定,字符串中的问号代表要传入的变量,每个问号都必须指定一个变量.

    查询, 输入每个指定的变量, 传入MYSQL_STMT变量用可用的连接句柄执行.

    代码如下:

    以下为引用的内容:

    //1.绑定

    bool CDBManager::BindInsertStmt(MYSQL * connecthandle)

    {

    //作插入操作的绑定

    MYSQL_BIND insertbind[FEILD_NUM];

    if(m_stInsertParam == NULL)

    m_stInsertParam = new CHostCacheTable;

    m_stInsertStmt = mysql_stmt_init(connecthandle);

    //构建绑定字符串

    char insertSQL[SQL_LENGTH];

    strcpy(insertSQL, "insert into HostCache(SessionID, ChannelID, ISPType, "

    "ExternalIP, ExternalPort, InternalIP, InternalPort) "

    "values(?, ?, ?, ?, ?, ?, ?)");

    mysql_stmt_prepare(m_stInsertStmt, insertSQL, strlen(insertSQL));

    int param_count= mysql_stmt_param_count(m_stInsertStmt);

    if(param_count != FEILD_NUM)

    return false;

    //填充bind结构数组, m_sInsertParam是这个statement关联的结构变量

    memset(insertbind, 0, sizeof(insertbind));

    insertbind[0].buffer_type = MYSQL_TYPE_STRING;

    insertbind[0].buffer_length = ID_LENGTH /* -1 */;

    insertbind[0].buffer = (char *)m_stInsertParam->sessionid;

    insertbind[0].is_null = 0;

    insertbind[0].length = 0;

    insertbind[1].buffer_type = MYSQL_TYPE_STRING;

    insertbind[1].buffer_length = ID_LENGTH /* -1 */;

    insertbind[1].buffer = (char *)m_stInsertParam->channelid;

    insertbind[1].is_null = 0;

    insertbind[1].length = 0;

    insertbind[2].buffer_type = MYSQL_TYPE_TINY;

    insertbind[2].buffer = (char *)&m_stInsertParam->ISPtype;

    insertbind[2].is_null = 0;

    insertbind[2].length = 0;

    insertbind[3].buffer_type = MYSQL_TYPE_LONG;

    insertbind[3].buffer = (char *)&m_stInsertParam->externalIP;

    insertbind[3].is_null = 0;

    insertbind[3].length = 0;

    insertbind[4].buffer_type = MYSQL_TYPE_SHORT;

    insertbind[4].buffer = (char *)&m_stInsertParam->externalPort;

    insertbind[4].is_null = 0;

    insertbind[4].length = 0;

    insertbind[5].buffer_type = MYSQL_TYPE_LONG;

    insertbind[5].buffer = (char *)&m_stInsertParam->internalIP;

    insertbind[5].is_null = 0;

    insertbind[5].length = 0;

    insertbind[6].buffer_type = MYSQL_TYPE_SHORT;

    insertbind[6].buffer = (char *)&m_stInsertParam->internalPort;

    insertbind[6].is_null = 0;

    insertbind[6].is_null = 0;

    //绑定

    if (mysql_stmt_bind_param(m_stInsertStmt, insertbind))

    return false;

    return true;

    }

    //2.查询

    bool CDBManager::InsertHostCache2(MYSQL * connecthandle, char * sessionid, char * channelid, int ISPtype, \

    unsigned int eIP, unsigned short eport, unsigned int iIP, unsigned short iport)

    {

    //填充结构变量m_sInsertParam

    strcpy(m_stInsertParam->sessionid, sessionid);

    strcpy(m_stInsertParam->channelid, channelid);

    m_stInsertParam->ISPtype = ISPtype;

    m_stInsertParam->externalIP = eIP;

    m_stInsertParam->externalPort = eport;

    m_stInsertParam->internalIP = iIP;

    m_stInsertParam->internalPort = iport;

    //执行statement,性能瓶颈处

    if(mysql_stmt_execute(m_stInsertStmt))

    return false;

    return true;

    }

    这里就为大家总结这一个技巧,更多的技巧将会在下篇文章中为大家讲解。

    【编辑推荐】

    【责任编辑:迎迎 TEL:(010)68476606】

    点赞 0

    展开全文
  • 1. 数据库方面 1. 建立索引 2.分区(如MySQL,按时间分区) 3. 尽量使用固定长度字段和限制字段长度(如 varchar(10)) 优势:... 提高数据库处理速度; 3. 附带校验数据库是否合法功能 2. 在数据库 I/O方面;...

    1. 数据库方面
         1. 建立索引
         2.分区(如MySQL,按时间分区)
         3. 尽量使用固定长度字段和限制字段长度(如 varchar(10))
               优势:1.  降低物理存储空间
                         2.  提高数据库处理速度;
                         3.  附带校验数据库是否合法功能
     2. 在数据库 I/O方面;
         1.  增加缓冲区
         2.  如果设计表的级联,不同的表存储在不同磁盘上,以增加 I/O速度

     3. 在sql 语句方面
        1.优化sql语句,减少比较次数
        2.限制返回条目数(mysql中使用limit)

    展开全文
  • 优势:①降低物理存储空间 ②提高数据库处理速度 ③附带校验数据是否合法功能 2、在数据库I/O方面: (1)增加缓冲区 (2)如果涉及表的级联,不同的表存储在不同磁盘上,以增加I/0速度 3、在SQL语句方面: (1...

    1、数据库设计方面:

    (1)建立索引

    (2)分区(MySQL,如按时间分区)

    (3)尽量使用固定长度字段和限制字段长度。(如VARCHAR2(10);优势:①降低物理存储空间 ②提高数据库处理速度 ③附带校验数据是否合法功能

    2、在数据库I/O方面:

    (1)增加缓冲区

    (2)如果涉及表的级联,不同的表存储在不同磁盘上,以增加I/0速度

    3、在SQL语句方面:

    (1)优化SQL语句,减少比较次数

    (2)限制返回条目数(MySQL中使用limit)

    4、在java方面:

    如果反复使用的查询,使用PreparedStatement减少查询次数。(PreparedStatement的第一次执行消耗是很高的,它的性能体现在后面的重复执行。

    展开全文
  • 提高数据库查询效率

    2018-11-27 15:28:35
    提高数据库查询效率的一些小建议和方法,希望能够帮助到你
  • 怎样提高数据库查询效率 怎样提高数据库查询效率 怎样提高数据库查询效率
  • 提高数据库查询效率的实用方法提高数据库查询效率的实用方法提高数据库查询效率的实用方法提高数据库查询效率的实用方法提高数据库查询效率的实用方法提高数据库查询效率的实用方法提高数据库查询效率的实用方法
  • 用于网络开发进行数据库调优 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...
  • 如何提高数据库查询效率 2017-02-15 目录 1 硬件调整性能 2 数据库设计方面 2.1 建立索引 2.2 字段类型 2.3 表变量和临时表3 SQL语句方面 3.1 避免全...在一个千万级的数据库查寻中,如何提高查询效率? 1 硬件...
  • 可以从以下多个方面优化数据库设计提高数据库查询效率a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将...
  • 数据库查询效率

    2012-02-07 13:59:18
    数据库查询效率,能提高数据库查询效率,很多,都是收藏啊
  • 如何提高数据库查询效率: 1.建立索引(提高数据库查询效率,但是会增加磁盘空间的负担)2.尽量避免使用*查询3.尽量避免使用模糊查询4.优化sql语句5.定期转移数据6.尽量避免多表连接(用内存换速度) 转载于:...
  • 在一个千万级的数据库查寻中,如何提高查询效率? 1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 ...
  • 查询 数据字典完成的,这将耗费更多的时间。 4. 用 EXISTS替代IN,用于连接另一个表 5.使用大写 6.用>=替代> : 高效:SELECT * FROM EMP WHERE DEPTNO >=4 低效: SELECT * FROM EMP WHERE DEPTNO >3 两者的区别在于...
  • 提高数据库查询效率的方法

    千次阅读 2019-09-27 14:44:28
    在千万级的数据库查询中,如何提高效率? 1)数据库设计方面 a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null...
  • 一、数据库设计方面 1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引; 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表...
  • 可以通过以下多个方面优化sql语句提高数据库查询效率1. 应尽量避免在 where 子句中使用!=或2. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t ...
  • 查询效率慢的原因: 1:没有加索引或者索引失效 where条件使用如下语句会索引失效:null、!=、<>、or连接、in(非要使用,可用关键字exist替代)和not in、'%abc%'; 使用参数:num=@num、表达式操作:...
  • 30个提高数据库查询效率方法总结笔记 30个提高数据库查询效率方法总结笔记
  • 一般在常用的column_name上面添加索引,如order by字句中的column_name Create index index_name on table_name(column_name); 可以提高查询效率
  • 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id ...
  • 一.首先对于硬件及数据库配置方面来说,可以考虑以下几方面:  1、升级硬件  ... 1、建立适当的索引(至于为什么请参考为什么建立了索引可以提高效率)  2、避免在索引列上使用计算   WHE
  • 下面是一个采用联接查询的SQL语句, select * from employss where first_name||''||last_name ='Beill Cliton';
  • 查询的时候小的空间字段搜索效率更高。2、查询的时候避免全表扫描,可以在where和order by 的字段上建立索引。3、where 查询子句中不对null值做判断,会导致检索引擎放弃使用索引而使用全表扫描,如:selectid,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,460
精华内容 3,384
关键字:

数据库提高查询效率