WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院数据库MySQL MySQL数据库优化(三) 阅读

MySQL数据库优化(三)

 2008-06-11 11:04:41 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愬搫绾ч柕濠忕細閼割亜顪冪€n剙浠ф繛鍫熷灥椤曘儵顢欓悡搴ば�
核心提示: 在 EXPLAIN 的结果中,这种方法在 type 字段中表现为 index_merge,MySQL数据库优化(三)(5),这种情况下,key 字段包含了所有使用的索引列表,EXPLAIN 当优化起作用时会显示 ref_or_null,优化程序会为任何索引部分处理 IS NULL,并且 k

在 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 有索引了:

上一页  1 2 3 4 5 6 7  下一页

Tags:MySQL 数据库 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接