加速动态网站 MySQL索引分析和优化

作者:凯旋网络来源:凯旋网络

以下为引用的内容:
firstname,lastname,age
firstname,lastname
firstname
 
从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引:

Chinaz.com

以下为引用的内容:
SELECT peopleid FROM people
WHERE firstname=''Mike'' AND lastname=''Sullivan'' AND age=''17'';
SELECT peopleid FROM people WHERE firstname=''Mike'' AND lastname=''Sullivan'';
SELECT peopleid FROM people WHERE firstname=''Mike'';
The following queries cannot use the index at all:
SELECT peopleid FROM people WHERE lastname=''Sullivan'';
SELECT peopleid FROM people WHERE age=''17'';
SELECT peopleid FROM people WHERE lastname=''Sullivan'' AND age=''17'';
 
五、选择索引列 Www~Chinaz~com

在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在WHERE子句中出现的列,在join子句中出现的列。请看下面这个查询:

Www_Chinaz_com

SELECT age ## 不使用索引
FROM people WHERE firstname=''Mike'' ## 考虑使用索引
AND lastname=''Sullivan'' ## 考虑使用索引
 
这个查询与前面的查询略有不同,但仍属于简单查询。由于age是在SELECT部分被引用,MySQL不会用它来限制列选择操作。因此,对于这个查询来说,创建age列的索引没有什么必要。下面是一个更复杂的例子:

Chinaz^com

以下为引用的内容:
SELECT people.age, ##不使用索引
town.name ##不使用索引
FROM people LEFT JOIN town ON
people.townid=town.townid ##考虑使用索引
WHERE firstname=''Mike'' ##考虑使用索引
AND lastname=''Sullivan'' ##考虑使用索引
 
与前面的例子一样,由于firstname和lastname出现在WHERE子句中,因此这两个列仍旧有创建索引的必要。除此之外,由于town表的townid列出现在join子句中,因此我们需要考虑创建该列的索引。那么,我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢?差不多如此,但并不完全。我们还必须考虑到对列进行比较的操作符类型。MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE ''Mich%'';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE ''%ike'';”这个查询不会使用索引。

Www.Chinaz.com

  • 广告推荐