MySQL数据库优化(三)
2008-06-11 11:04:41 来源:WEB开发网在 EXPLAIN 的结果中,这种方法在 type 字段中表现为 index_merge。这种情况下,key 字段包含了所有使用的索引列表,并且 key_len 字段包含了使用的索引的最长索引部分列表。
例如:
SELECT*FROMtbl_nameWHEREkey_part1=10ORkey_part2=20;
SELECT*FROMtbl_name
WHERE(key_part1=10ORkey_part2=20)ANDnon_key_part=30;
SELECT*FROMt1,t2
WHERE(t1.key1IN(1,2)ORt1.key2LIKE'value%')
ANDt2.key1=t1.some_col;
SELECT*FROMt1,t2
WHEREt1.key1=1
AND(t2.key1=t1.some_colORt2.key2=t1.some_col2);
5. MySQL 如何优化 IS NULL
MySQL在 col_name IS NULL 时做和 col_name = constant_value 一样的优化。例如,MySQL使用索引或者范围来根据 IS NUL L搜索 NULL。
SELECT*FROMtbl_nameWHEREkey_colISNULL;
SELECT*FROMtbl_nameWHEREkey_col<=>NULL;
SELECT*FROMtbl_name
WHEREkey_col=const1ORkey_col=const2ORkey_colISNULL;
如果一个 WHERE 子句包括了一个 col_name IS NULL 条件,并且这个字段声明为 NOT NULL,那么这个表达式就会被优化。当字段可能无论如何都会产生 NULL 值时,就不会再做优化了;例如,当它来自一个 LEFT JOIN 中右边的一个表时。
MySQL 4.1.1或更高会对连接 col_name = expr AND col_name IS NULL 做额外的优化, 常见的就是子查询。EXPLAIN 当优化起作用时会显示 ref_or_null。
优化程序会为任何索引部分处理 IS NULL。
以下几个例子中都做优化了,假使字段 a 和 表 t2 中 b 有索引了:
更多精彩
赞助商链接