<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引
若某字段已建立索引,求该字段的min()或max()时,MySQL会使用索引
不要以为WHERE中的字段顺序无所谓,可以随便放在哪,应该尽可能地第一次就过滤掉大部分无用的数据,只返回最小范围的数据。
在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
使用短索引可以提高查询速度而且可以节省磁盘空间和I/O操作。
如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。
在mysql中执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引
尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
mysql where z和order by x,y 可以建立联合索引 z+x+y来处理,但必须保证x,y两个排序字段,同为倒序或正序。
不要在列上进行运算
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01’;
不使用NOT IN和<>操作
存储索引方式:
B-树 查找范围
hash索引 查找一条记录
create index orderid_productid on orders(product_id, order_id);
若某字段已建立索引,求该字段的min()或max()时,MySQL会使用索引
不要以为WHERE中的字段顺序无所谓,可以随便放在哪,应该尽可能地第一次就过滤掉大部分无用的数据,只返回最小范围的数据。
在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
使用短索引可以提高查询速度而且可以节省磁盘空间和I/O操作。
如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。
在mysql中执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引
尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
mysql where z和order by x,y 可以建立联合索引 z+x+y来处理,但必须保证x,y两个排序字段,同为倒序或正序。
不要在列上进行运算
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01’;
不使用NOT IN和<>操作
存储索引方式:
B-树 查找范围
hash索引 查找一条记录
create index orderid_productid on orders(product_id, order_id);