你不一定知道的MySQL技巧
来源:优易学  2009-11-23 18:53:25   【优易学:中国教育考试门户网】   资料下载   IT书店
全站文章页内部300*250广告位

 

  key_len: 4

  ref: const

  rows: 143

  Extra:

  1 row in set (0.00 sec)我们在整型字段的值上加索引,是可以用到索引的,网上不少人误传在整型字段上加引号无法使用索引。修改uid字段类型为varchar(12):

  mysql> alter table tbl_name change uid uid varchar(12) not null;测试如下查询:

  mysql> explain select * from tbl_name where uid = 1081283900\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: tbl_name

  type: ALL

  possible_keys: uid

  key: NULL

  key_len: NULL

  ref: NULL

  rows: 10000

  Extra: Using where

  1 row in set (0.00 sec)我们在查询值上不加索引,结果索引无法使用,注意安全。

  六、前缀索引

  有时候我们的表中有varchar(255)这样的字段,而且我们还要对该字段建索引,一般没有必要对整个字段建索引,建立前8~12个字符的索引应该就够了,很少有连续8~12个字符都相等的字段。

  为什么?更短的索引意味索引更小、占用CPU时间更少、占用内存更少、占用IO更少和很更好的性能。

  七、MySQL索引使用方式

  MySQL在一个查询中只能用到一个索引(5.0以后版本引入了index_merge合并索引,对某些特定的查询可以用到多个索引,具体查考[中文] [英文]),所以要根据查询条件建立联合索引,联合索引只有第一位的字段在查询条件中能才能使用到。

  如果MySQL认为不用索引比用索引更快的话,那么就不会用索引。

  mysql> create index times on tbl_name(times);

  Query OK, 10000 rows affected (0.10 sec)

  Records: 10000  Duplicates: 0  Warnings: 0

  mysql> explain select * from tbl_name where times > 20\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: tbl_name

  type: ALL

  possible_keys: times

  key: NULL

  key_len: NULL

  ref: NULL

  rows: 10000

  Extra: Using where

  1 row in set (0.00 sec)

  mysql> explain select * from tbl_name where times > 200\G;

  *************************** 1. row ***************************

  id: 1

  select_type: SIMPLE

  table: tbl_name

  type: range

  possible_keys: times

  key: times

  key_len: 3

  ref: NULL

  rows: 1599

  Extra: Using where

  1 row in set (0.00 sec)数据表中times字段绝大多数都比20大,所以第一个查询没有用索引,第二个才用到索引。

上一页  [1] [2] 

责任编辑:小草

收藏此页】【 】【打印】【回到顶部
计算机文章页底部500*200广告
文章搜索:
 相关文章
计算机底部580*90广告
文章页右侧第一330*280广告
计算机文章页资讯推荐
热点资讯
文章页330尺寸谷歌广告位
热门课程培训