千万级别数据量mysql优化策略
表结构优化
1. 使用独立表空间
独立表空间指的是innodb表的一种数据结构
独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
2. 分区表
分区表是一种粗粒度,简易的索引策略,适用于大数据的过滤场景.最适合的场景是,没有合适的索引时,对其中几个分区表进行全表扫描.或者只有一个分区表和索引是热点,而且这个分区和索引能够全部存储在内存中.限制单表分区数不要超过150个,并且注意某些导致无法做分区过滤的细节,分区表对于单条记录的查询没有优势,需要注意这类查询的性能.
根据表结构的特点可以将单表根据一些特定的条件来进行分区,例如一张表的数据是按照时间的先后顺序进行插入的,那便可以根据时间戳这个字段来进行分区。
3. 内存数据库
可以考虑将数据存入内存数据库来加快数据查询的速度。
Sql优化
1. 多条件查询下的强制(忽略)索引策略
强制索引 FORCE INDEX
SELECT * FROM TABLE1 FORCE INDEX (FIELD1) …
以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。
忽略索引 IGNORE INDEX
SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) …
在上面的SQL语句中,TABLE1表中FIELD1和FIELD2上的索引不被使用。
配合分区表的话一般来说强制使用的索引是分区表的分区条件字段。
2. 尽量减少表的关联使用单表进行查询
大数据量的情况下如果使用表关联的话,产生的笛卡儿积的数量太大数据库进行条件过滤进行的计算耗费时间。