SQL调优之排名优化
mysql> explain extended select t.rowno from
(SELECT @rowno:=@rowno+1 as rowno,ur.customer_id as userId from t_hss_user_info_rank ur,
(select @rowno:=0) rno order by ur.give_pers_count DESC,
ur.last_give_time DESC
) t where t.userid= '1000010000000010';
+----+-------------+------------+--------+---------------+-----------------+---------+-------+--------+----------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+--------+---------------+-----------------+---------+-------+--------+----------+----------------+
| 1 | PRIMARY | <derived2> | ref | <auto_key0> | <auto_key0> | 152 | const | 10 | 100.00 | Using where |
| 2 | DERIVED | <derived3> | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
| 2 | DERIVED | ur | index | NULL | give_pers_count | 11 | NULL | 311847 | 100.00 | Using index |
| 3 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+----+-------------+------------+--------+---------------+-----------------+---------+-------+--------+----------+----------------+
4 rows in set, 1 warning (0.00 sec)
mysql> show create table t_hss_user_info_rank\G
*************************** 1. row ***************************
Table: t_hss_user_info_rank
Create Table: CREATE TABLE `t_hss_user_info_rank` (
`customer_id` varchar(50) NOT NULL COMMENT '会员Id',
`user_name` varchar(50) DEFAULT NULL COMMENT '会员名称',
`phone_no` varchar(11) DEFAULT NULL,
`give_count` int(10) DEFAULT NULL COMMENT '赠送份额',
`give_pers_count` int(10) DEFAULT NULL COMMENT '赠送人数',
`last_give_time` datetime DEFAULT NULL COMMENT '最后赠送时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`modify_time` datetime DEFAULT NULL COMMENT '修改时间',
`scene_no` int(10) DEFAULT NULL COMMENT '赠送份额',
PRIMARY KEY (`customer_id`),
KEY `index_user_rank_customer_id` (`customer_id`,`give_count`,`last_give_time`),
KEY `give_pers_count` (`give_pers_count`,`last_give_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> select t.rowno from (SELECT @rowno:=@rowno+1 as rowno,ur.customer_id as userId from t_hss_user_info_rank ur,(select @rowno:=0) rno order by ur.give_pers_count DESC, ur.last_give_time DESC ) t where t.userid= '1000010000000010';
+-------+
| rowno |
+-------+
| 139 |
+-------+
1 row in set (2.42 sec)
1、优化方式(一),利用整形检索快的原理,将customer_id在临时表里转化为整形;
select t.rowno from (SELECT @rowno:=@rowno+1 as rowno,cast(ur.customer_id as unsigned) as userId from t_hss_user_info_rank ur,(select @rowno:=0) rno order by ur.give_pers_count asc, ur.last_give_time asc ) t where t.userid= '1000010000000010';
+-------+
| rowno |
+-------+
| 139 |
+-------+
1 row in set (0.71 sec)
这表现出一个问题,表结构设计不合理,能用unsigned int表示,为什么用varchar?
2、优化方式(二),使用中间表,存储排序结果,每天更新一次;
SQL调优之排名优化的更多相关文章
- SQL调优
# 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)
继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...
- 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习
<高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...
- 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,
梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...
- 记一次SQL调优/优化(SQL tuning)——性能大幅提升千倍以上
好久不写东西了,一直忙于各种杂事儿,恰巧昨天有个用户研发问到我一个SQL调优的问题,说性能太差,希望我能给调优下,最近有些懒,可能和最近太忙有关系,本来打算问问现在的情况,如果差不多就不调了,那哥们儿 ...
- SQL调优常用方法
在使用DBMS时经常对系统的性能有非常高的要求:不能占用过多的系统内存和 CPU资源.要尽可能快的完成的数据库操作.要有尽可能高的系统吞吐量.如果系统开发出来不能满足要求的所有性能指标,则必须对系统进 ...
- 读《程序员的SQL金典》[4]--SQL调优
一.SQL注入 如果程序中采用sql拼接的方式书写代码,那么很可能存在SQL注入漏洞.避免的方式有两种: 1. 对于用户输入过滤敏感字母: 2. 参数化SQL(推荐). 二.索引 ①索引分类 聚簇索引 ...
- 二十种实战调优MySQL性能优化的经验
二十种实战调优MySQL性能优化的经验 发布时间:2012 年 2 月 15 日 发布者: OurMySQL 来源:web大本营 才被阅读:3,354 次 消灭0评论 本文将为大家介 ...
- [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优
最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...
随机推荐
- 算法库:boost安装配置
前提是电脑上已经装有VS. 1. 下载boost_1_60_0.zip并解压到所需位置 2. 双击bootstrap.bat生成b2.exe(新版)和bjam.exe(老版) 3. 双击b2.exe或 ...
- Sql的一些概念
聚合函数 聚合函数可以返回整个或者几个列或者一个列的汇总数据,它常用来计算SELECT语句查询的统计值.聚合函数经常与SELECT语句的GROUP BY 子句一同使用.
- System.TypeInitializationException: The type initializer for 'Mono.Unix.Native.Stdlib' threw an exception.
08-31 17:02:03: ### DEBUG ##########################System.TypeInitializationException: The type ini ...
- 使用Jmeter录制脚本
相对于LoadRunner跟SilkPerformer来说,Jmeter确实有差距,但毕竟前两者太贵,Jmeter胜在免费开源. 先看下LoadRunner录制的脚本如下,美如画,结构清晰,易于修改编 ...
- APP自适应的例子
<!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" ...
- transition实现自定义tips淡入淡出效果
transition实现动画的时候,只能实现指定属性的渐变,元素显隐要通过opacity来实现: 做了一个小的demo: <!doctype html> <html> < ...
- 系统中定义VOMapping的时候注意大小写
VOMapping中的第一个参数一定要严格按照大小写(缩写的单词容易错): 例如:VO中的定义: private CntVOEnums.EnumIVRStage ivrStage; 实际反射找这个字段 ...
- JavaScript入门
本篇内容是学习慕课网相关课程后,总结出可能未来会忘记的内容 (一)JavaScript入门操作 1.js代码插入位置,以及执行顺序 <head> <script type=" ...
- nginx的一些介绍和使用
nginx 的安装 我们首先进行下载安装:http://nginx.org/download/nginx-1.4.2.tar.gz 安装准备: nginx依赖于pcre库,要先安装pcre 1 yum ...
- 如何使用XproerUI库(WTL)-XproerUI界面库教程
版权所有 2009-2015 荆门泽优软件有限公司 保留所有权利 产品首页:http://www.ncmem.com/apps/xproerui/index.asp 开发文档(SkinStudio): ...