`
wx1569578408
  • 浏览: 71453 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

杂计

阅读更多

字段名   name  
              a 
              null 
             b
              null  
              a
select * from test group by name
结果为
     a
     null
      b 
想得到的是
      a 
     null
     null
     b 
SQL语句:

select name from test where name is not null group by name
union all
select name from test where name is null;

===================

在某些情况下,or条件可以避免全表扫描的。

1 .where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。1)myisam表:
CREATE TABLE IF NOT EXISTS `a` (
  `id` int(1) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `aNum` char(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

mysql> explain select * from a where id=1 or uid =2;
+----+-------------+-------+-------------+---------------+-------------+---------+------+------+---------------------------------------+
| id | select_type | table | type        | possible_keys | key         | key_len | ref  | rows | Extra                                 |
+----+-------------+-------+-------------+---------------+-------------+---------+------+------+---------------------------------------+
|  1 | SIMPLE      | a     | index_merge | PRIMARY,uid   | PRIMARY,uid | 4,4     | NULL |    2 | Using union(PRIMARY,uid); Using where |
+----+-------------+-------+-------------+---------------+-------------+---------+------+------+---------------------------------------+
1 row in set (0.00 sec)
 

2)innodb表:

CREATE TABLE IF NOT EXISTS `a` (
  `id` int(1) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `aNum` char(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;


mysql>  explain select * from a where id=1 or uid =2;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | a     | ALL  | PRIMARY,uid   | NULL | NULL    | NULL |    5 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)


2 .必须所有的or条件都必须是独立索引:+-------+----------------------------------------------------------------------------------------------------------------------
| Table | Create Table
+-------+----------------------------------------------------------------------------------------------------------------------
| a     | CREATE TABLE `a` (
  `id` int(1) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `aNum` char(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)

explain查看:
mysql> explain select * from a where id=1 or uid =2;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | a     | ALL  | PRIMARY       | NULL | NULL    | NULL |    5 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

1 row in set (0.00 sec)

全表扫描了。



3. 用UNION替换OR (适用于索引列)       通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 

       注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低.

       在下面的例子中, LOC_ID 和REGION上都建有索引.
       高效:

 
  • select loc_id , loc_desc , region from location where loc_id = 10   
  • union   
  • select loc_id , loc_desc , region  from location where region = "melbourne"   

     低效: 
  • select loc_id , loc desc , region from location where loc_id = 10 or region = "melbourne"  
 

如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面.

4. 用in来替换or       这是一条简单易记的规则,但是实际的执行效果还须检验,在oracle8i下,两者的执行路径似乎是相同的. 
低效: 
select…. from location where loc_id = 10 or loc_id = 20 or loc_id = 30 
高效 
select… from location where loc_in  in (10,20,30);

 

 

 

转载于:https://my.oschina.net/u/3255899/blog/1499268

分享到:
评论

相关推荐

    计及杂散电感的多芯片IGBT模块损耗计算.pdf

    在IGBT模块的封装过程中,会引入一些无法避免的杂散参数,其中杂散电感是影响IGBT动态性能的重要因素。由于杂散电感的存在,会导致IGBT模块内部的电流分布不均,从而产生额外的开关损耗。 3. 杂散电感对IGBT动态...

    计及阀点效应负荷经济分配的杂交粒子群算法.pdf

    计及阀点效应负荷经济分配的杂交粒子群算法 计及阀点效应负荷经济分配的杂交粒子群算法(HPSO)是一种高效的优化算法,用于解决复杂的非凸、非线性具有阀点效应的火电有功负荷经济分配问题。该算法通过粒子追随自己...

    复 杂 列 计 算.rar

    在Excel中进行复杂列计算是数据分析和处理过程中的一项重要技能。复杂列计算涵盖了多种运算技巧,包括但不限于函数的嵌套使用、逻辑判断、数组公式、条件格式等。这些功能可以帮助我们处理大量的数据,进行统计分析...

    电磁流量计说明书.pdf

    4. **抗干扰能力强**:采用低频矩形波激磁方式,能够有效抵抗工频和其他现场杂散干扰,工作更加稳定可靠。 5. **双向计量**:不受流体流向的影响,可以正向或反向准确计量。 6. **宽量程比**:支持的流速范围广,...

    数字频率计的设计 开题报告

    直接式以其快速度和低相位噪声受到青睐,但结构复杂、杂散多;锁相式则以自动相位同步、高频率、低功耗和易工程化为特点;直接数字式则以其高精度和模块化设计见长。 报告回顾了数字频率计的发展历程,强调了VHDL...

    欧姆龙液位计选型和使用

    例如,使用600V 0.75mm2 3芯橡皮绝缘电缆时,应考虑到线路的杂散电容对测量结果的影响。此外,绝缘电阻和耐电压值是衡量设备安全性和稳定性的重要指标,需要确保这些参数符合应用要求。 总的来说,欧姆龙液位计的...

    解决电磁流量计故障检测时5大注意点

    电磁流量计是工业生产中广泛使用的一种流量测量设备,其主要通过测量流体在电磁场中的感应电动势来计算流体的流量。然而,在使用过程中,电磁流量计可能会出现各种故障,影响测量的准确性和设备的正常运行。因此,...

    电磁流量计使用中常见的故障有哪些

    电磁流量计作为一种重要的工业控制设备,广泛应用于各种流体的流量测量。然而,在实际使用过程中,电磁流量计可能会出现各种故障,这些故障大致可以分为调试期故障和运行期故障两大类。 调试期故障通常在仪表安装和...

    原位杂交凋亡检测技术.ppt

    2. 液相杂交:液相杂交通常用于定量分析,通过标记的探针与靶分子在溶液中结合,然后通过不同的检测系统,如计数器、光度计或化学发光测定,来测量结合的程度。 3. 原位杂交:原位杂交是在保留细胞或组织结构的基础...

    原位杂交与凋亡检测技术PPT课件.pptx

    液相杂交是以生物素或丫啶翁酯标记探针在溶液中用羟基磷灰石层析或吸附、亲和吸附、磁珠吸附等方法进行杂交,结果于计数器、光度计或用化学发光测定。原位杂交是在具有明确的结构基础上,如一个细菌,一条染色体,...

    电磁流量计调试期故障分析

    管道中的杂散电流可能会对流量计的测量造成干扰,通常通过良好的单独接地可以解决,但在强杂散电流环境下可能需要采取传感器与管道绝缘的措施。此外,空间电磁波干扰可能通过信号电缆引入,单层屏蔽通常足以防止干扰...

    开放式基因芯片杂交体系可行性研究.pdf

    例如,设定温度为50℃时,表面温度的平均值为48.7℃,与水银温度计测得的值相差不大。温度偏差值随着温度的降低而减小,证明了该温度控制系统在不同温度下的稳定性和均匀性。 ***D成像体系对杂交结果分析 使用CCD...

    VEGA 导波雷达液位计-培训讲解PPT 21页.pptx

    - **示例**:对于VEGAPLUS 62型液位计,可以通过调整波形抑制杂讯信号,如在管嘴一半处设置为110dB。 3. **接触式雷达导波液位计波形查看**: - **步骤**:同样使用VEGA CONNECT连接液位计,并通过VEGA USB-SCAN...

    电磁流量计常见故障原因档.pdf

    2. 环境干扰:环境中的杂散电流、电磁波干扰以及大电机产生的磁场都可能影响流量计的正常工作。对于杂散电流干扰,单独的接地保护通常能有效解决,但在强杂散电流环境下可能需要额外的绝缘措施。空间电磁波干扰则...

    电子功用-埋地管道埋深及杂散电流大小方向和地磁方位角的测量方法

    通过电流钳表、电位差计和接地电阻测试仪等设备,可以监测到管道上的电流分布和电位差异,进而分析杂散电流的大小和方向。测量过程中需注意消除环境因素干扰,确保数据准确性。 3. **地磁方位角的测量**:地磁方位...

    紫外可见分光光度计校准指南

    ### 紫外可见分光光度计校准指南 #### 一、目的 本指南旨在为紫外可见分光光度计(UV-Vis Spectrophotometer)的校准提供全面的技术指导。通过准确地执行校准程序,可以确保仪器在进行物质分析时的数据准确性与可靠...

Global site tag (gtag.js) - Google Analytics