以下的文章主要介绍的是SQL优化索引问题,在一般的数据库中,用MySQLSQL优化索引来对相关数据库进行优化的使用率是相当高的。以下的文章主要是通过索引通常可以帮助我们解决大多数的SQL性能问题。
1. 索引的存储分类
MyISAM存储引擎的表的数据和索引时自动分开存储的,各自是独立的一个文件;InnoDB存储引擎的表的数据和索引时存储在同一表空间里面,但可以有多个文件组成。
MySQL中索引的存储类型目前只有两种(BTREE和HASH),具体和表的存储引擎相关;MyISAM和InnoDB存储引擎都只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以以只取name的前4个字符进行MySQLSQL优化索引,这个特征可以大大缩小索引文件的大小。在设计表结构的时候也可以对文本列根据此特性进行灵活设计。例如
引用
create index ind_company2_name on company2(name(4))
2. MySQL如何使用索引
索引用于快速找出在某个列中有一特定值的行。对相关列使用索引时提高SELECT操作性能的最佳途径。
如果按company_id进行表查询
引用
使用explain来分析下
explain select * from sales2 where company_id =2000 G; explain select * from sales2 where moneys = 1G;
以上两句你可以认为是一样的。其实是不一样的。第一句其实没有用到索引,而第二句才能够利用到索引。另外如果like后面跟的是一个列的名字,那么索引也不会被使用。
如果对大是文本进行搜索,使用全文索引而不用使用like"%..%"
如果列名是索引,使用column_name is null 将使用索引如
查询name为nll的记录就用到了索引