mysql函数 优化_Mysql函数求优化解决思路
mysql函数求优化
小弟刚开始接触Mysql数据库,需要基于Mysql数据库做报表开发,写的一个函数查询时候效率特别低下。
备注:传进来比较的参数数据量 5W条左右。请高手指教优化方法。
另外,一般Mysql调试的技巧及工具都用什么
函数如下:
SQL code
DELIMITER $$ DROP FUNCTION IF EXISTS `nqrptr`.`get_ip_type_test`$$ CREATE DEFINER=`netqos`@`%` FUNCTION `get_ip_type_test`(ip_no bigint(10),code_type int(10), return_type varchar(20)) RETURNS varchar(40) CHARSET latin1 BEGIN DECLARE return_value varchar(30); DECLARE temp_prov varchar(30); DECLARE temp_city varchar(30); DECLARE temp_busi varchar(30); DECLARE iftrue int(10); select count(1) into iftrue from nqrptr.idc_ip_mapping where status = 1 AND type_id = code_type AND start_ip_no <= ip_no AND end_ip_no >= ip_no; if iftrue = 0 then set return_value = 'Unkown Ip'; else SELECT provinces_id,city_id,busi_id INTO temp_prov,temp_city,temp_busi FROM nqrptr.idc_ip_mapping WHERE status = 1 AND type_id = code_type AND start_ip_no <= ip_no AND end_ip_no >= ip_no; if return_type = 'PRO' then set return_value = temp_prov; elseif return_type = 'CITY' then set return_value = temp_city; elseif return_type = 'BUSI' then set return_value = temp_busi; elseif return_type = 'IPFromTo' then set return_value = concat(temp_start,' to ',temp_end); else set return_value='other'; end if; end if; RETURN return_value; END$$ DELIMITER ;
1
DELIMITER$$DROPFUNCTIONIFEXISTS`nqrptr`.`get_ip_type_test`$$CREATEDEFINER=`netqos`@`%`FUNCTION`get_ip_type_test`(ip_nobigint(10),code_typeint(10),return_typevarchar(20))RETURNSvarchar(40)CHARSETlatin1BEGINDECLAREreturn_valuevarchar(30);DECLAREtemp_provvarchar(30);DECLAREtemp_cityvarchar(30);DECLAREtemp_busivarchar(30);DECLAREiftrueint(10);selectcount(1)intoiftruefromnqrptr.idc_ip_mappingwherestatus=1ANDtype_id=code_typeANDstart_ip_no<=ip_noANDend_ip_no>=ip_no;ififtrue=0thensetreturn_value='Unkown Ip';elseSELECTprovinces_id,city_id,busi_idINTOtemp_prov,temp_city,temp_busiFROMnqrptr.idc_ip_mappingWHEREstatus=1ANDtype_id=code_typeANDstart_ip_no<=ip_noANDend_ip_no>=ip_no;ifreturn_type='PRO'thensetreturn_value=temp_prov;elseifreturn_type='CITY'thensetreturn_value=temp_city;elseifreturn_type='BUSI'thensetreturn_value=temp_busi;elseifreturn_type='IPFromTo'thensetreturn_value=concat(temp_start,' to ',temp_end);elsesetreturn_value='other';endif;endif;RETURNreturn_value;END$$DELIMITER;
欢迎大家阅读《Mysql函数求优化解决思路》,跪求各位点评,by 搞代码
------解决方案--------------------
索引建立没有,将
if return_type = 'PRO' then
set return_value = temp_prov;
elseif return_type = 'CITY' then
set return_value = temp_city;
elseif return_type = 'BUSI' then
set return_value = temp_busi;
elseif return_type = 'IPFromTo' then
set return_value = concat(temp_start,' to ',temp_end);
else
set return_value='other';
end if;
end if;
set return_valuE=IF(return_type = 'CITY',temp_city,...)
修改为IF OR CASE WHEN
------解决方案--------------------
应该是这句话慢
select count(1) into iftrue
from nqrptr.idc_ip_mapping where status = 1
AND type_id = code_type
AND start_ip_no <= ip_no
AND end_ip_no >= ip_no;
加索引
alter table idc_ip_mapping add index(type_id)
------解决方案--------------------
索引建立没有
type_id start_ip_no end_ip_no 建立复合索引
------解决方案--------------------
把字段type_id start_ip_no end_ip_no建立复合索引。
------解决方案--------------------
select count(1) into iftrue
from nqrptr.idc_ip_mapping where status = 1
AND type_id = code_type
AND start_ip_no <= ip_no
AND end_ip_no >= ip_no;
if iftrue = 0 then
set return_value = 'Unkown Ip';->
if not exists(select 1
from nqrptr.idc_ip_mapping where status = 1
AND type_id = code_type
AND start_ip_no <= ip_no
AND end_ip_no >= ip_no) then
set return_value = 'Unkown Ip';
....
试试
------解决方案--------------------
贴建表及插入记录的SQL,及要求结果出来看看
看看能否用SQL语句直接解决
------解决方案--------------------
SQL code
DELIMITER $$ DROP FUNCTION IF EXISTS nqrptr.get_ip_type_test$$ CREATE DEFINER=netqos@% FUNCTION get_ip_type_test(ip_no bigint(10),code_type int(10), return_type varchar(20)) RETURNS varchar(40) CHARSET latin1 BEGIN DECLARE return_value varchar(30); DECLARE temp_prov varchar(30); DECLARE temp_city varchar(30); DECLARE temp_busi varchar(30); DECLARE iftrue int(10); SELECT provinces_id,city_id,busi_id INTO temp_prov,temp_city,temp_busi FROM nqrptr.idc_ip_mapping WHERE status = 1 AND type_id = code_type AND start_ip_no <= ip_no AND end_ip_no >= ip_no; if FOUND_ROWS() = 0 then set return_value = 'Unkown Ip'; else if return_type = 'PRO' then set return_value = temp_prov; elseif return_type = 'CITY' then set return_value = temp_city; elseif return_type = 'BUSI' then set return_value = temp_busi; elseif return_type = 'IPFromTo' then set return_value = concat(temp_start,' to ',temp_end); else set return_value='other'; end if; end if; RETURN return_value; END$$ DELIMITER ;
原创文章,转载请注明: 转载自搞代码
微信 赏一包辣条吧~
支付宝 赏一听可乐吧~
mysql函数 优化_Mysql函数求优化解决思路相关推荐
- mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...
- mysql数据库sql优化_MySQL 数据库性能优化之SQL优化
注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据 ...
- 熟悉mysql数据库设计和性能优化_Mysql数据库性能优化
Mysql数据库性能优化,可以从下面三点入手: 数据库设计 SQL语句优化 架构优化 一.数据库设计优化 1.适度的违反范式,适度 遵循三大范式就会带来查询时经常需要join,导致查询效率降低 ...
- mysql sql优化_Mysql的SQL优化指北
要知道怎么优化首先要知道一条SQL是怎么被执行的 首先我们会连接到这个数据库上,这时候接待你的就是连接器.连接器负责跟客户端建立连接.获取权限.维持和管理连接. MySQL拿到一个查询请求后,会先到查 ...
- mysql的字符串等于函数吗_MySQL函数的字符串函数
展开全部 a) 函数 ascii(str) 函数用法说62616964757a686964616fe4b893e5b19e31333361303036明:返回值为字符串 str 的最左字符的数值.假如 ...
- mysql函数示例_mysql函数备忘单和示例
mysql函数示例 There are a ton of functions provided by MySQL and most of them are used extensively. I wi ...
- mysql function加速_MySQL - 函数(FUNCTION)
about MySQL提供了丰富的内置函数自定义函数. 而我们也对这些函数有所了解,比如聚合函数. 本篇再来了解一些内置函数和自定义函数的编写. 写在前面的话:默认情况下,函数名称和其后的括号之间必须 ...
- mysql空值判断怎么优化_MySQL查询语句优化的十个小技巧!
前言 查询语句的优化是SQL效率优化的一个方式,可以通过优化sql语句来尽量使用已有的索引,避免全表扫描,从而提高查询效率.最近在对项目中的一些sql进行优化,总结整理了一些方法. 1.尽量避免在 w ...
- 添加mysql 函数库_mysql函数创建
如何使用MySQL提升权限 前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器.最早看到相关的报道是在o-otik上,但是公布的是针 ...
最新文章
- java 入门-helloWorld
- AI监测分析课堂背后的旷视科技:清华学霸创立,半年亏损52亿
- ansible 修改文件变量_Ansible Playbook中的变量与引用
- 5 QM配置-质量计划配置-编辑缺陷类型的选择集
- python 网上爬取数据源码_Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章...
- 一个很好的开源图像处理软件--imageJ (2
- Python基础语法(if语句)
- 西门子PLC控制器家族产品汇总
- 自动无刷电机和螺旋桨测试-如何测试无人机的动力系统?
- 百度itextpdf工具类,快速生成PDF打印模板,itextpdf5加公章
- TDengine在图扑工业物联网监控平台中的应用
- “郭德纲”挤兑死人不带脏字,经典…
- java端口扫描器 demo_java端口扫描器
- Android 实现禁用中文键盘
- java swing 跳转窗口_java swing 怎么实现点击按钮或者某个组件,跳转到另一个页面或者窗体?...
- mysql相关的dll_libmysql_d.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- 技术美术面试问题整理
- DVWA1.9之文件上传漏洞High级多种方法
- 基于Arduino 开发 MAX30102 LM35 SSD1306 观察血氧、心率和温度血氧仪
- 试用与非门和异或门设计一个组合逻辑电路来判断输入的四位二进制数能否被5整除(0可被5整除), 若可被整除则输出F=1, 否则F=0(山东大学二〇二〇年数字电路906综合题第4题)(全网第一手资料)
热门文章
- win7系统安装 wifi连接到服务器,win7系统笔记本wifi无法连接到服务器1237的解决方法...
- html滚动条固定前几行,bootstrapTable定位行固定滚动条
- 笔记-15 网络编程入门 UDP通信程序 TCP通信程序 练习
- hadoop面试题 5 ---有用
- 九龙证券|光模块概念股封单资金超3亿元,传媒板块涨停潮来袭
- 清华张敏教授:个性化推荐研究进展(可解释性、鲁棒性和公平性)
- 有趣的游戏-猜黑白纸
- C++ STL求全排列和组合
- 神秘AI变脸软件风靡全球,让你秒变身迪士尼在逃主角
- 计算两个数之差的绝对值