Commit adc80495 authored by 王雷's avatar 王雷 😹

Update (SQL)优化分析与方法.md

parent 2fdb56fb
...@@ -99,7 +99,7 @@ limit ...@@ -99,7 +99,7 @@ limit
4. 索引尽量创建在会对外进行关联的数据列上,如在销售模块中,我们有订单表,订单明细表,客户信息表,其中订单表中有客户 ID,订单明细表中有订单 ID,那么订单表中的客户 ID 和订单明细表中的订单 ID 就应该创建索引; 4. 索引尽量创建在会对外进行关联的数据列上,如在销售模块中,我们有订单表,订单明细表,客户信息表,其中订单表中有客户 ID,订单明细表中有订单 ID,那么订单表中的客户 ID 和订单明细表中的订单 ID 就应该创建索引;
5. 创建外键,这是一把双刃剑,有外键关系的表在进行关联时相对于索引还有一定的提升,但使用了外键在对数据进行增删改的时候有一定的顺序影响,因此我不建议大家使用外键。 5. 创建外键,这是一把双刃剑,有外键关系的表在进行关联时相对于索引还有一定的提升,但使用了外键在对数据进行增删改的时候有一定的顺序影响,因此我不建议大家使用外键。
6. 条件类型,在执行查询时,作为变量的条件要尽可能的与要比对的数据列类型一致,减少数据库引擎转换数据类型的时间; 6. 条件类型,在执行查询时,作为变量的条件要尽可能的与要比对的数据列类型一致,减少数据库引擎转换数据类型的时间;
7. 如果要参与比对的条件需要用到条件,则尽量避免在数据列上使用,这样会造成索引失效,而形成全表扫描,增加数据量; 7. 如果要参与比对的条件需要用到函数,则尽量避免在数据列上使用,这样会造成索引失效,而形成全表扫描,增加数据量;
8. 如果查询条件中对同一个数据列与多个选项,不要使用 or 进行条件关联,而是使用 in; 8. 如果查询条件中对同一个数据列与多个选项,不要使用 or 进行条件关联,而是使用 in;
9. 如果查询条件中是一个变量可能符合多个数据列,可以将 in 反过来写,如,订单表中,想要查找 **未交费****未开票****未发货** 的数据,则条件可以写为 ***where 'N' in (pay_status, invoice_status, send_status)*** 9. 如果查询条件中是一个变量可能符合多个数据列,可以将 in 反过来写,如,订单表中,想要查找 **未交费****未开票****未发货** 的数据,则条件可以写为 ***where 'N' in (pay_status, invoice_status, send_status)***
10. 如果查询条件包含较多的 or,可以使用 union all 来分解为多个 and 条件的 sql,避免因为使用 or 关系造成索引失效; 10. 如果查询条件包含较多的 or,可以使用 union all 来分解为多个 and 条件的 sql,避免因为使用 or 关系造成索引失效;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment