MySQL
金典培训教程
mysql> select * from tbl_name where key_col LIKE "%Patrick%";
mysql> select * from tbl_name where key_col LIKE other_col;
在第一条语句中,
LIKE
值以一个通配符字符开始。在第二条语句中,
LIKE
值不是一
个常数。
如果 column_name 是一个索引,使用column_name IS NULL的搜索将使用索引。
MySQL通常使用找出最少数量的行的索引。一个索引被用于你与下列操作符作比较的
列:=、>、>=、<、<=、BETWEEN和一个有一个非通配符前缀象'something%'的
LIKE的列。
对于一个多列索引,如果在WHERE子句的所有AND层次使用索引,将不使用来索引
优化查询。为了能够使用索引优化查询,必须把一个多列索引的前缀使用在一个AND
条件组中。
下列
WHERE
子句使用索引:
... WHERE index_part1=1 AND index_part2=2
... WHERE index=1 OR A=10 AND index=2 /* index = 1 OR index = 2 */
... WHERE index_part1='hello' AND index_part_3=5
/* optimized like "index_part1='hello'" */
这些
WHERE
子句不使用索引:
... WHERE index_part2=1 AND index_part3=2 /* index_part_1 is not used */
... WHERE index=1 OR A=10 /* No index */
... WHERE index_part1=1 OR index_part2=10 /* No index spans all rows */
8.1.4
索引的作用
所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。字符串是自动地压
缩前缀和结尾空间。CREATE INDEX句法。
索引用于:
快速找出匹配一个WHERE子句的行。
在多个表的查询时,执行连接时加快了与其他表中的行匹配的行的搜索。
对特定的索引列找出MAX()或MIN()值。
如果排 序或 分组 在一个可用索引的最 左面前缀上进行 (例如, ORD E R B Y
key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以
倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表
的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从
索引树被检索出来。
8.1.5
索引的弊端
一般情况下,如果
MySQL
能够知道怎样用索引来更快地处理查询,它就会这样做。
这表示,在大多数情况下,如果您不对表进行索引,则损害的是您自己的利益。可以看出
作者描绘了索引的诸多好处。但有不利之处吗?是的,有。实际上,这些缺点被优点所掩
182
htt p : / / w w w. yur e n n et. c o m