一种基于MySQL数据库的查询优化方法

文档序号:6620227阅读:395来源:国知局
一种基于MySQL数据库的查询优化方法
【专利摘要】本发明提供了一种基于MySQL数据库的查询优化方法,用以提高MySQL查询重用优化技术的利用率,包括如下步骤:S1、获得带有无效字符和/或大写字母的SQL查询语句;S2、计算SQL查询语句中每个单词的哈希值;S3、建立一数组,数组中存储单词的哈希值及该单词的前三个字符;S4、循环遍历SQL查询语句中的单词;S5、若找到SQL查询语句中存在一具有无效字符的单词;S6、若存在一单词,且该单词前3个字符与数组中提前储存的3个字符也相同,则判定所述单词为关键字,将此单词转化为规范化的小写形式;S7、输出关键词规范化的SQL查询语句;S8、若存在一单词,且该单词前3个字符与数组中提前储存的所有单词的前3个字符都不相同,判定所述单词为非关键字。
【专利说明】一种基于MySQL数据库的查询优化方法

【技术领域】
[0001] 本发明涉及网络数据库【技术领域】,尤其涉及一种基于MySQL数据库的查询优化方 法。

【背景技术】
[0002] 随着网络数据库应用的日益广泛,越来越多的数据需要存储及查询,因此,数据库 查询效率的高低会直接影响系统用户的应用,当数据库的数据量达到几十万甚至更多时, 就会出现数据库的瓶颈问题,因此,考虑如何优化数据库的查询性能是十分必要的。
[0003] 查询重用方法的研究对查询技术的优化具有重要的意义。MySQL数据库查询重 用技术是利用查询缓存区存储查询语句的文本字符串和查询结果集,并且共享给所有客户 端,通过对查询语句进行特定的Hash计算之后与结果集对应存放在查询缓存区中,以提高 完全相同的Query语句的相应速度。即当MySQL服务器接收到同样的SQL语句时,会根据相 应缓冲区中存储的内容把相应执行结果返回给客户端,如果没有找到相同的SQL语句时, 会在查询缓冲区中分配一块区域用于存储新的SQL语句和查询结果集,以便下次利用。具 体如何设置查询缓存的参数,可以参看前面介绍的参数配置。虽然启动查询重用功能会带 来一定的额外开销,但最终查询效率能显著提高。
[0004] 但由于是采用纯文本ASCII码存储重用SQL语句,因此要求SQL语句必须 完全一致才能使用重用技术,存在查询重用性不高的缺点,如select*fromtest和 Select*fromtest两条SQL语句仅仅是大小写不同,就会导致MySQL不能重用查询结果。
[0005] 此外,如查询结果数据量不大时,利用缓存方法保存结果还是较好的,但如果查询 数据量特别大时,若存储这些结果,会消耗大量内存资源,导致系统性能下降,是不合理的, 因此,以上这些问题限制了 MySQL查询重用技术的实际应用。


【发明内容】

[0006] 针对以上分析的查询重用技术存在的问题,本发明提供了一种基于MySQL数据库 的查询优化方法,提出了相应的改进措施,用以提高MySQL查询重用优化技术的利用率。
[0007] 为实现上述目的,本发明采用如下技术方案:
[0008] -种基于MySQL数据库的查询优化方法,包括如下步骤:
[0009] S1、获得带有无效字符和/或大写字母的SQL查询语句;
[0010] S2、计算SQL查询语句中每个单词的哈希值;
[0011] S3、建立一数组,数组中存储单词的哈希值及该单词的前三个字符,使用所述单词 的哈希值作为数组的下标值,使哈希值与数组的下标匹配;
[0012] S4、循环遍历SQL查询语句中的单词;
[0013] S5、若找到SQL查询语句中存在一具有无效字符的单词,判定所述单词为非关键 字,删除非关键字中的无效字符,转入步骤S4 ;
[0014] S6、若存在一单词,且该单词前3个字符与数组中提前储存的3个字符也相同,则 判定所述单词为关键字,将此单词转化为规范化的小写形式,转入步骤S7 ;
[0015] S7、输出关键词规范化的SQL查询语句;
[0016] S8、若存在一单词,且该单词前3个字符与数组中提前储存的所有单词的前3个字 符都不相同,判定所述单词为非关键字,转入步骤S4。
[0017] 进一步的,所述的无效字符,包括多余的空格字符、回车字符。
[0018] 有益效果:本方法消除了因 SQL语句必须完全一致才能使用重用技术而导致的查 询重用性不高的缺点,提高了 MySQL查询重用优化技术的利用率。

【专利附图】

【附图说明】
[0019] 图1为本方法的流程图。

【具体实施方式】
[0020] 下面结合附图及具体实施例对本发明进一步说明。
[0021] 如图1所示,一种基于MySQL数据库的查询优化方法,包括如下步骤:
[0022] S1、获得带有无效字符和/或大写字母的SQL查询语句;
[0023] S2、计算SQL查询语句中每个单词的哈希值;
[0024] S3、建立一数组,数组中存储单词的哈希值及该单词的前三个字符,使用所述单词 的哈希值作为数组的下标值,使哈希值与数组的下标匹配;
[0025] S4、循环遍历SQL查询语句中的单词;
[0026] S5、若找到SQL查询语句中存在一具有无效字符的单词,判定所述单词为非关键 字,删除非关键字中的无效字符,转入步骤S4 ;
[0027] S6、若存在一单词,且该单词前3个字符与数组中提前储存的3个字符也相同,则 判定所述单词为关键字,将此单词转化为规范化的小写形式,转入步骤S7 ;
[0028] S7、输出关键词规范化的SQL查询语句;
[0029] S8、若存在一单词,且该单词前3个字符与数组中提前储存的所有单词的前3个字 符都不相同,判定所述单词为非关键字,转入步骤S4。
[0030] 进一步的,所述的无效字符,包括多余的空格字符、回车字符。
[0031] 针对MySQL数据库纯文本存储的查询语句重用性不高的问题,本实施例提出一种 改进措施一Querykey算法。主要针对查询语句中出现的一些无效字符以及一些大小写不 规范化的字符,进行处理,本方法设计一函数 :hashkey (),该函数首先将SQL查询的单词的 hash值计算出来,然后将hashkeyO返回值加上该单词的前3个字母,将该单词的hash值 与该单词的前三个字母存放到一数组arrhash[100]中,数组下标为该单词的hash值。其 中存放关键字的前3个字母的原因是为了避免查询语句中的非关键字经过函数hashkeyO 计算后得到的值与SQL的某关键字的hash值相同,导致无法正确处理。当对输入的SQL查 询语句进行扫描时,系统首先通过hashkey ()计算每个单词的hash值,然后通过hash值与 arrhash[100]数组下标进行匹配,若存在且该单词前3个字符与分量中提前储存的3个字 符也相同,则认为找到该关键字,并将其转化为规范化的小写形式,最后输出。
【权利要求】
1. 一种基于MySQL数据库的查询优化方法,其特征在于:包括如下步骤: 51、 获得带有无效字符和/或大写字母的SQL查询语句; 52、 计算SQL查询语句中每个单词的哈希值; 53、 建立一数组,数组中存储单词的哈希值及该单词的前三个字符,使用所述单词的哈 希值作为数组的下标值,使哈希值与数组的下标匹配; 54、 循环遍历SQL查询语句中的单词; 55、 若找到SQL查询语句中存在一具有无效字符的单词,判定所述单词为非关键字,删 除非关键字中的无效字符,转入步骤S4 ; 56、 若存在一单词,且该单词前3个字符与数组中提前储存的3个字符也相同,则判定 所述单词为关键字,将此单词转化为规范化的小写形式,转入步骤S7 ; 57、 输出关键词规范化的SQL查询语句; 58、 若存在一单词,且该单词前3个字符与数组中提前储存的所有单词的前3个字符都 不相同,判定所述单词为非关键字,转入步骤S4。
2. 如权利要求1所述的一种基于MySQL数据库的查询优化方法,其特征在于:所述的 无效字符,包括多余的空格字符、回车字符。
【文档编号】G06F17/30GK104123354SQ201410337753
【公开日】2014年10月29日 申请日期:2014年7月15日 优先权日:2014年7月15日
【发明者】汪祖民, 王阳 申请人:大连大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1