面试题答案
一键面试原因分析
- FLOAT类型精度问题:FLOAT是单精度浮点数,在表示小数时存在精度限制。例如,对于一些金额值可能无法精确表示,导致计算总销售额、平均销售额等统计查询结果不准确。
- 查询效率低:没有合适的索引,全表扫描导致查询效率低下。对于包含大量销售金额数据的表,全表扫描的开销非常大。
优化方案
- 实数类型调整:
- 使用DECIMAL类型:DECIMAL类型用于存储精确的小数,适合存储金额数据。例如在MySQL中,可以定义字段为
DECIMAL(M, D)
,其中M
是总位数(包括整数部分和小数部分),D
是小数位数。如DECIMAL(10, 2)
可以存储最大为99999999.99的金额值。
- 使用DECIMAL类型:DECIMAL类型用于存储精确的小数,适合存储金额数据。例如在MySQL中,可以定义字段为
- 索引优化:
- 单列索引:如果经常根据销售金额进行查询,例如查询大于某个金额的销售记录,可以在销售金额字段上创建单列索引。在MySQL中可以使用
CREATE INDEX idx_sales_amount ON your_table_name(sales_amount);
。 - 复合索引:如果查询条件还涉及其他字段,如销售日期和销售金额,可以创建复合索引。例如
CREATE INDEX idx_sales_date_amount ON your_table_name(sales_date, sales_amount);
,复合索引的顺序很重要,一般将选择性高(数据重复度低)的字段放在前面。这样在进行相关统计查询时,数据库可以利用索引快速定位数据,提高查询效率。
- 单列索引:如果经常根据销售金额进行查询,例如查询大于某个金额的销售记录,可以在销售金额字段上创建单列索引。在MySQL中可以使用