EXPLAIN
SELECT b.CO,d.C3,d.C4 FROM 
ST32 b
LEFT JOIN 
ST100_main c 
ON b.CO = c.CO
LEFT JOIN 
ST100_2 d 
ON c.CV = d.CV
WHERE b.CO LIKE '%600004%'
结果如下:
 id | select_type | table | type  | possible_keys | key     | key_len | ref         | rows  | Extra                    |
+----+-------------+-------+-------+---------------+---------+---------+-------------+-------+--------------------------+
|  1 | SIMPLE      | b     | index | NULL          | COC6    | 103     | NULL        | 29616 | Using where; Using index |
|  1 | SIMPLE      | c     | ref   | PRIMARY       | PRIMARY | 98      | dzhst2.b.CO |  6263 |                          |
|  1 | SIMPLE      | d     | ref   | PRIMARY,CVC3  | CVC3    | 8       | dzhst2.c.CV |    19 |                          
但是我在这里加上一个d.C3 = '20120417000000' 条件之后速度就特别慢。
EXPLAIN
SELECT b.CO,d.C3,d.C4 FROM 
ST32 b
LEFT JOIN 
ST100_main c 
ON b.CO = c.CO
LEFT JOIN 
ST100_2 d 
ON c.CV = d.CV
WHERE b.CO LIKE '%600004%' AND d.C3 = '20120417000000';
+----+-------------+-------+------+---------------+------+---------+-------------------+--------+--------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref               | rows   | Extra                    |
+----+-------------+-------+------+---------------+------+---------+-------------------+--------+--------------------------+
|  1 | SIMPLE      | c     | ALL  | PRIMARY,CV    | NULL | NULL    | NULL              | 626345 |                          |
|  1 | SIMPLE      | b     | ref  | PRIMARY,COC6  | COC6 | 98      | dzhst2.c.CO       |      1 | Using where; Using index |
|  1 | SIMPLE      | d     | ref  | PRIMARY,CVC3  | CVC3 | 17      | dzhst2.c.CV,const |      1 | Using where              |
+----+-------------+-------+------+---------------+------+---------+-------------------+--------+--------------------------
这里在ST100_main c 后面添加 force index(PRIMARY) 也没有效果。show  index 语句也贴一下吧,
SHOW INDEX FROM ST100_main;
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| ST100_main |          0 | PRIMARY  |            1 | CO          | A         | NULL        | NULL     | NULL   |      | BTREE      |         |               |
| ST100_main |          0 | PRIMARY  |            2 | C1          | A         |      626345 | NULL     | NULL   |      | BTREE      |         |               |
| ST100_main |          1 | CV       |            1 | CV          | A         |      626345 | NULL     | NULL   | YES  | BTREE      |         |               |
| ST100_main |          1 | C1       |            1 | C1          | A         |         257 | NULL     | NULL   |      | BTREE      |         |               |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
谢谢耐心看完这些东西,给我一点指点。

解决方案 »

  1.   

    WHERE b.CO LIKE '%600004%':无法使用索引
      

  2.   

    我把b.CO LIKE '%600004%' 改成b.CO = 'SH600005.stk' 速度确实快了,explain后能够使用索引了,
    我最开始把原因归于加了条件:d.C3 = '20120417000000',因为两个语句就因为加了这个过滤条件速度反而变的更慢了。
    还有些别的问题想不明白,先想想。
      

  3.   

    是啊,我也看到了,但是他没用到索引跟b.CO LIKE '%600004%':无法使用索引
    有什么关系?