一、七种JOIN理论
- SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.Key = B.Key
- SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.Key = B.Key
- SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.Key = B.Key WHERE B.Key IS NULL
- SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.Key = B.Key WHERE A.Key IS NULL
- SELECT <select_list> FROM Table A INNER JOIN Table B ON A.Key = B.Key
(等号联接默认为内联接:SELECT <select_list> FROM Table A,Table B WHERE A.Key = B.Key) - SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.Key = B.Key
(mysql中没有这种连接,可以使用UNION关键字合并1,2) - SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL
二、索引的优化
- 不在索引上做任何操作,包括计算、函数、类型转换,否则会导致索引失效而转向全表扫描。
- 存储引擎不能使用索引中范围条件右边的列。
- 尽量使用覆盖索引(索引列和查询列一致),减少select *。
- mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描。
- is null,is not null也无法使用索引。
- like以通配符开头(’%abc’),mysql索引会失效。