读书频道 > 网站 > 网页设计 > MySQL入门很简单
18.2.3 使用索引查询
12-07-31    叶孤城
收藏    我要投稿   

本文所属图书 > MySQL入门很简单

本书从初学者的角度出发,由浅入深,循序渐进地介绍了MySQL数据库应用与开发的相关知识。书中提供了大量操作MySQL数据库的示例,还提供了大量实例和上机实践内容,供读者演练。本书共分5篇。第1篇介绍数据库的基...立即去当当网订购
索引可以提高查询的速度。但是有些时候即使查询时使用的是索引,但索引并没有起作用。本小节将向读者介绍索引的使用。
 
1.查询语句中使用LIKE关键字
 
在查询语句中使用LIKE关键字进行查询时,如果匹配字符串的第一个字符为"%"时,索引不会被使用。如果"%"不是在第一个位置,索引就会被使用。
 
【示例18-3】 下面查询语句中使用LIKE关键字,并且匹配的字符串中含有"%"符号。EXPLAIN语句执行如下:
 
mysql> EXPLAIN SELECT * FROM student WHERE name LIKE '%四' \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: ALL 
possible_keys: NULL 
          key: NULL 
      key_len: NULL 
          ref: NULL 
         rows: 6 
        Extra: Using where 
1 row in set (0.00 sec) 
 
mysql> EXPLAIN SELECT * FROM student WHERE name LIKE '李%' \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: range 
possible_keys: index_name 
          key: index_name 
      key_len: 22 
          ref: NULL 
         rows: 1 
        Extra: Using where 
1 row in set (0.00 sec)
第一个查询语句执行后,rows参数的值为6,表示这次查询过程中查询了6条记录;第二个查询语句执行后,rows参数的值为1,表示这次查询过程只查询一条记录。同样是使用name字段进行查询,第一个查询语句没有使用索引,而第二个查询语句使用了索引index_name。因为第一个查询语句的LIKE关键字后的字符串以"%"开头。
 
2.查询语句中使用多列索引
 
多列索引是在表的多个字段上创建一个索引。只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。
 
【示例18-4】 下面在birth和department两个字段上创建多列索引,然后验证多列索引的使用情况。
 
mysql> CREATE INDEX index_birth_department ON student(birth,department); 
Query OK, 6 rows affected (0.01 sec) 
Records: 6  Duplicates: 0  Warnings: 0 
 
mysql> EXPLAIN SELECT * FROM student WHERE birth=1991 \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: ref 
possible_keys: index_birth_department 
          key: index_birth_department 
      key_len: 2 
          ref: const 
         rows: 1 
        Extra: Using where 
1 row in set (0.00 sec) 
 
mysql> EXPLAIN SELECT * FROM student WHERE department='英语系' \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: ALL 
possible_keys: NULL 
          key: NULL 
      key_len: NULL 
          ref: NULL 
         rows: 6 
        Extra: Using where 
1 row in set (0.00 sec)
在birth字段和department字段上创建一个多列索引。第一个查询语句的查询条件使用了birth字段,分析结果显示rows参数的值为1。而且显示查询过程中使用了index_birth_department索引。第二个查询语句的查询条件使用了department字段,结果显示rows参数的值为6。而且key参数的值为NULL,这说明第二个查询语句没有使用索引。因为name字段是多列索引的第一个字段,只有查询条件中使用了name字段才会使index_name_department索引起作用。
 
3.查询语句中使用OR关键字
 
查询语句只有OR关键字时,如果OR前后的两个条件的列都是索引时,查询中将使用索引。如果OR前后有一个条件的列不是索引,那么查询中将不使用索引。
 
【示例18-5】 下面演示OR关键字的使用。
 
mysql> EXPLAIN SELECT * FROM student WHERE name='张三' or sex='女' \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: ALL 
possible_keys: index_name 
          key: NULL 
      key_len: NULL 
          ref: NULL 
         rows: 6 
        Extra: Using where 
1 row in set (0.00 sec) 
 
mysql> EXPLAIN SELECT * FROM student WHERE name='张三' or id=3 \G 
*************************** 1. row *************************** 
           id: 1 
  select_type: SIMPLE 
        table: student 
         type: index_merge 
possible_keys: PRIMARY,id,index_name 
          key: index_name,PRIMARY 
      key_len: 22,4 
          ref: NULL 
         rows: 2 
        Extra: Using union(index_name,PRIMARY); Using where 
1 row in set (0.00 sec)
第一个查询语句没有使用索引,因为sex字段上没有索引;第二个查询语句使用了index_name和PRIMARY这两个索引,因为name字段和id字段上都有索引。
 
技巧:使用索引查询记录时,一定要注意索引的使用情况。例如,LIKE关键字配置的字符串不能以"%"开头;使用多列索引时,查询条件必须要使用这个索引的第一个字段;使用OR关键字时,OR关键字连接的所有条件都必须使用索引。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站