mysql索引和分表

mysql索引和分表

索引

前缀索引

  • 什么是前缀索引

建立索引关键字一种方案。

通常会使用字段的整体作为索引关键字。 有时,即使使用字段前部分数据,也可以去识别某些记录。

  • 语法

Index index_name (index_field(N))

使用index_name前N个字符建立的索引。

N最多是9个字符

全文索引

该类型的索引特殊在:关键字的创建上。 为了解决 like ‘%keyword%’这类查询的匹配问题。

  • 测试

业务

查询 标题或者内容包含 database 关键字的记录。 形成的SQL如下:

Select * from articles where title like ‘%database%’ or body like ‘%database%’;

此时不能建立普通索引,查询不符合 左原则,建立了也使用不了。 此时 全文索引就可以其作用了:

alter table articles add fulltext index 'title_body'('title','body');

直接使用上面的SQL: 需要使用特殊的全文索引匹配语法才可以生效: Match() against();

select * from articles where match(title,body) against('database');

该MYSQL提供的全文索引,不能对中文起作用!

  • 停止词
select * from articles where match(title,body) against('in');

发现in这个词,是不能被全文索引所检索到的

查询缓存 query_cache

  • 将select的结果,存取起来共二次使用的缓存区域:

  • 查询是否开启缓存

  • 开启缓存

注意

  1. 查询缓存存在判断是严格依赖于select语句本身的:严格保证SQL一致

比如:where和WHERE,将不会查询缓存

  1. 如果查询时包含动态数据,则不能被缓存。
  2. 一旦开启查询缓存,MySQL会将所有可以被缓存的select语句都缓存。如果存在不想使用缓存的SQL执行,则可以使用 SQL_NO_CACHE语法提示达到目的:

分表

  • 分区,partition

将某张表数据,分别存储到不同的区域中。

其实:每个分区,就是独立的表。都要存储该分区数据的数据,索引等信息。

语法

Create table table_name (
	定义
)
Partition by 分区算法 (参数) 分区选项。

分区与存储引擎无关,是MySQL逻辑层完成的。

通过变量查看当前mysql是否支持分区:

  • 分区算法:

    • MySQL提供4种
    • 取余:Key,hash
    • 条件:List,range
  • 分表,水平分表

创建结构相同的N个表;

创建N个相同的表,在把N个表合并在一起

你可能感兴趣的:(mysql)