表students,和索引如下
mysql> select * from students;
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 903 | 张三 | 女 | 1990 | 英语系 | 北京市朝阳区 |
| 904 | 李四 | 男 | 1990 | 数学系 | 湖南省长沙市 |
+-----+--------+------+-------+------------+--------------+
4 rows in set (0.00 sec)
mysql> desc students_extra;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | |
| extra | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
下面的这个可以理解,因为sex没有建索引,所以没有用上索引,rows值为4
mysql> EXPLAIN SELECT * FROM students WHERE name='张三' or sex='女'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: students
type: ALL
possible_keys: index_name
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra: Using where
1 row in set (0.00 sec)
但是下面的就不理解了,为什么rows值还是4呢?
mysql> EXPLAIN SELECT * FROM students WHERE name='张三' or id=903\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: students
type: ALL
possible_keys: PRIMARY,index_name
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra: Using where
1 row in set (0.00 sec)
没有应用上索引 ,此问题 一直卡这,过两天朋友告诉我是存储类型的问题 要选择MyISAM类型的就OK了
CREATE TABLE emp(
id int primary key,
name varchar(20) not null,
age int not null
)ENGINE=myisam DEFAULT CHARSET=gbk;
INSERT INTO emp VALUES(12,'学他1',121);
INSERT INTO emp VALUES(13,'学他2',122);
INSERT INTO emp VALUES(14,'学他3',123);
INSERT INTO emp VALUES(15,'学他4',124);
INSERT INTO emp VALUES(16,'学他5',125);
ALTER TABLE emp ADD index(id);
EXPLAIN
SELECT id,name,age
FROM emp
WHERE id = 16 or name = '学他5' \G;
这样就会用上。。。。,做下笔记。