1. 数据类型:常用的数据列「不要使用」文本类型,尽量使用具体的数据类型。比如日期时间类型,如果存储类别为文本,数据需要逐字节扫描,而日期类型的话只需进行一次比较。这一条最为重要,是用血的教训换来的。之前做了个日志清洗程序,把在手上管理着的网络设备,一台BAS,两台无线控制器认证日志清洗后放在数据库了(其中日志里面的时间日期就是用文本格式存储的),因为单位无线系统是用的WPA2 Enterprise做的准入认证,这就导致了它产生数据速度非常快。数据量增加到千万级的时候,一个Select半天都出不来数据。后来将相关的列数据类型改为「日期/时间」类型后相同的查询(全表扫描)10多秒就出结果。
2. 建索引:索引就是提供给查询后面的Where子句用的,你常用哪些列,就把他做成索引。另外,在文本型数据列上创建索引,要加上TEXT_PATTERN_OPS,否则索引不能用于诸如like这样的操作符。
3. 使用部分索引:即只针对关注的数据建索引,以免进行无谓的扫描。
4. 使用分区表:将数据分类存储到不同的分区表,使用约束排除过滤不关注的数据,以快速检出所需数据。
5. 使用联合索引:Where子句涉及多个字段「and」操作时,可以通过创建联合索引(多字段索引)优化。子句中如果出现静态表达式时,可以创建表达式索引。所谓静态表达式,是每一次执行结果都一样的表达式。比如两个字段数据运算结果是静态的。但诸如current_timestamp这种,每一次运行结果都不一样,是动态的。