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调优之排名优化的更多相关文章

  1. SQL调优

    # 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  2. 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)

    继<高性能SQL调优精要与案例解析>一书谈SQL调优(SQL TUNING或SQL优化),我们今天就谈谈各主流关系库中,占据SQL调优技术和工作半壁江山的.最重要的核心机制之一——索引(i ...

  3. 《高性能SQL调优精要与案例解析》一书谈SQL调优(SQL TUNING或SQL优化)学习

    <高性能SQL调优精要与案例解析>一书上市发售以来,很多热心读者就该书内容及一些具体问题提出了疑问,因读者众多外加本人日常工作的繁忙 ,在这里就SQL调优学习进行讨论并对热点问题统一作答. ...

  4. 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,

    梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...

  5. 记一次SQL调优/优化(SQL tuning)——性能大幅提升千倍以上

    好久不写东西了,一直忙于各种杂事儿,恰巧昨天有个用户研发问到我一个SQL调优的问题,说性能太差,希望我能给调优下,最近有些懒,可能和最近太忙有关系,本来打算问问现在的情况,如果差不多就不调了,那哥们儿 ...

  6. SQL调优常用方法

    在使用DBMS时经常对系统的性能有非常高的要求:不能占用过多的系统内存和 CPU资源.要尽可能快的完成的数据库操作.要有尽可能高的系统吞吐量.如果系统开发出来不能满足要求的所有性能指标,则必须对系统进 ...

  7. 读《程序员的SQL金典》[4]--SQL调优

    一.SQL注入 如果程序中采用sql拼接的方式书写代码,那么很可能存在SQL注入漏洞.避免的方式有两种: 1. 对于用户输入过滤敏感字母: 2. 参数化SQL(推荐). 二.索引 ①索引分类 聚簇索引 ...

  8. 二十种实战调优MySQL性能优化的经验

    二十种实战调优MySQL性能优化的经验 发布时间:2012 年 2 月 15 日 发布者: OurMySQL 来源:web大本营   才被阅读:3,354 次    消灭0评论     本文将为大家介 ...

  9. [SQL SERVER系列]读书笔记之SQL注入漏洞和SQL调优

    最近读了程序员的SQL金典这本书,觉得里面的SQL注入漏洞和SQL调优总结得不错,下面简单讨论下SQL注入漏洞和SQL调优. 1. SQL注入漏洞 由于“'1'='1'”这个表达式永远返回 true, ...

随机推荐

  1. [DFNews] EIFT更新至1.2,支持iPhone4s及iPhone5物理获取

    俄罗斯厂商Elcomsoft近日更新了其旗下的iOS取证软件Elcomesoft iOS Forensic Toolkit,更新后的1.2版本支持针对iOS 4-6的iPhone 4s.iPhone5 ...

  2. POJ C Looooops

    Description A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; ...

  3. Show "Appear Offline" in Lync

    在注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Communicator 创建DWORD,name是EnableAppearOffline,v ...

  4. 记一次Android内存分析过程

    前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...

  5. listview java.lang.ArrayIndexOutOfBoundsException:

    检测下BaseAdapter  下的getViewTypeCount()方法返回的值与getItemViewType返回的个数是否是相等的!

  6. EntityFramework+WCF

    首先需要在服务对象实例上面添加数据契约[DataContract]和  [DataMember],当然直接在类中修改也可以,但是对于tt模板来说一旦保存以后数据就会重新生成, 所以得在tt模板中修改 ...

  7. Servlet Cookie处理

    Servlet Cookie 处理 Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息.Java Servlet 显然支持 HTTP Cookie. 识别返回用户包括三个步骤: 服务 ...

  8. 使用GIT进行源码管理——GIT托管服务

    虽然GIT是分布式代码管理,但是仍然需要一个集中存储服务以实现团队协作和代码备份的.对于企业的私有代码来说,大多是自建GIT托管服务.但对于开源项目和个人的私有项目,往往是选择一个GIT托管网站,这样 ...

  9. 最小生成树(HDOJ 1863)

    畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1863 1.Prim算法: Prim算法是由一个点(最初的集合)向外延伸,找到与集合相连权值最小的边, ...

  10. gitlab 配置

    一.Gitlab的使用 具体步骤: 1.打开 Git Bash,输入~ssh -keygen  然后一直回车,直至出现图片上的内容 1) 2) 2.然后自动生成.ssh文件夹,双击文件夹 1) 2) ...