MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 5498|回复: 3
打印 上一主题 下一主题

[列及列类型] 字符串的比较查询

[复制链接]
跳转到指定楼层
1#
发表于 2008-2-28 13:39:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mysql> select * from abc;
+----+-----------+---------------------+
| c1 | c2        | c3                  |
+----+-----------+---------------------+
|  1 | abc       | 2008-02-28 11:32:29 |
|  2 | abc123    | 2008-02-28 11:32:32 |
|  3 | abc123456 | 2008-02-28 11:32:36 |
|  4 | abc xyz   | 2008-02-28 11:32:41 |
|  5 | abcabc    | 2008-02-28 11:32:53 |
+----+-----------+---------------------+
5 rows in set (0.00 sec)

mysql> select * from abc where c2 like 'abc%';
+----+-----------+---------------------+
| c1 | c2        | c3                  |
+----+-----------+---------------------+
|  1 | abc       | 2008-02-28 11:32:29 |
|  2 | abc123    | 2008-02-28 11:32:32 |
|  3 | abc123456 | 2008-02-28 11:32:36 |
|  4 | abc xyz   | 2008-02-28 11:32:41 |
|  5 | abcabc    | 2008-02-28 11:32:53 |
+----+-----------+---------------------+
5 rows in set (0.00 sec)

mysql> select * from abc where c2>='abc' and c2<'abd';
+----+-----------+---------------------+
| c1 | c2        | c3                  |
+----+-----------+---------------------+
|  1 | abc       | 2008-02-28 11:32:29 |
|  2 | abc123    | 2008-02-28 11:32:32 |
|  3 | abc123456 | 2008-02-28 11:32:36 |
|  4 | abc xyz   | 2008-02-28 11:32:41 |
|  5 | abcabc    | 2008-02-28 11:32:53 |
+----+-----------+---------------------+
5 rows in set (0.00 sec)

第一种like方法不能使用列c2上的索引,为全表扫描,第二种方法可以,所以当数据量大时,第二种方法要比第一种方法快。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
发表于 2008-3-4 13:14:04 | 只看该作者
3#
发表于 2008-3-5 15:20:26 | 只看该作者
更正一下,第2条语句是可以使用索引的。下面是我的例子

  1. mysql> explain select * from DEVICEINFO where DEVICEMAC LIKE 'aa%';
  2. +----+---------------+----------------+--------+--------------------------------------+---------------+-----------+-------+------+---------------+
  3. | id   | select_type  | table             | type   | possible_keys                           | key              | key_len  | ref     | rows| Extra           |
  4. +----+---------------+----------------+--------+--------------------------------------+---------------+-----------+-------+------+---------------+
  5. |  1   | SIMPLE        | DEVICEINFO | range | DEVICEMAC,deviceMAC_Index | DEVICEMAC | 768        | NULL |    1  | Using where |
  6. +----+---------------+----------------+--------+--------------------------------------+---------------+-----------+-------+------+---------------+
  7. 1 row in set (0.00 sec)
复制代码
  1. explain select * from DEVICEINFO where DEVICEMAC LIKE '%aa';
  2. +----+-------------+------------+------+---------------+------+---------+------+-------+-------------+
  3. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
  4. +----+-------------+------------+------+---------------+------+---------+------+-------+-------------+
  5. | 1 | SIMPLE | DEVICEINFO | ALL | NULL | NULL | NULL | NULL | 10126 | Using where |
  6. +----+-------------+------------+------+---------------+------+---------+------+-------+-------------+
  7. 1 row in set (0.00 sec)
复制代码
也就是说like子句中如果%出现在右边,则可以使用索引,出现在左边则不可以。

[ 本帖最后由 edwin_chen 于 2008-3-5 15:24 编辑 ]
4#
 楼主| 发表于 2008-4-10 09:12:20 | 只看该作者
呵呵,谢谢楼上兄弟的指正,粗心了,没仔细看%号在左在右就上来乱发贴,真该打。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-25 03:36 , Processed in 0.068086 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表