一、建立索引
1、前缀索引
建立前缀索引的语法:
alter table test add KEY (name(5));
name一定是字符类型(索引字段),5为长度
那好,如何确定取前面几个字符呢?显然,这个场景是一个观察的结果,也就是说,必须要有一定量的实际数据,我们才能分析出其规律,也就是说这个索引是在后期优化得来的,前期没必要建立。
- 计算不重复的概率:
select COUNT(DISTINCT name) / COUNT(*) as rate from test;
- 找出接近rate的一个n(试出最合理的n)
select COUNT(DISTINCT LEFT(name, 3)) / COUNT() as rate3 from test; select COUNT(DISTINCT LEFT(name, 5)) / COUNT() as rate5 from test; select COUNT(DISTINCT LEFT(name, 7)) / COUNT() as rate7 from test; select COUNT(DISTINCT LEFT(name, 9)) / COUNT() as rate9 from test; select COUNT(DISTINCT LEFT(name, 11)) / COUNT() as rate11 from test; select COUNT(DISTINCT LEFT(name, 15)) / COUNT() as rate15 from test; select COUNT(DISTINCT LEFT(name, 20)) / COUNT(*) as rate20 from test; …
2、全文索引
该类型的索引特殊在:关键字的创建上。为了解决 like ‘%keyword%’这类查询的匹配问题。
查询 标题或者内容包含 database 关键字的记录。
形成的SQL如下:
Select * from articles where title like ‘%database%’ or body like ‘%database%’;
此时需要建立全文索引
直接使用上面的SQL:
需要使用特殊的全文索引匹配语法才可以生效:
Match() against();
注意:mysql提供的全文索引不能对中文起作用,可以采用Sphinx索引引擎。
Match() against() ,返回的关键字的匹配度(关键字与记录的关联程度)。