表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; 这样就会用上。。。。,做下笔记。 (责任编辑:IT) |