> 数据库 > MySQL >

mysql性能优化,EXPLAIN SELECT FROM 表名 WHERE 列名=数值1 or 列名2=数值2

表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)