diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.md" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.md" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.md" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/client.md" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/config.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/config.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/config.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/config.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.md" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.md" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.md" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/engine.md" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/node.txt" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/node.txt" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/node.txt" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/node.txt" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.md" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.md" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.md" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.MySQL \345\237\272\346\234\254\346\246\202\345\277\265/server.md" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/config.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/config.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/config.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/config.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/node.txt" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/node.txt" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/node.txt" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/node.txt" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.json" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.json" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.json" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.json" diff --git "a/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.md" "b/data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.md" similarity index 100% rename from "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/1.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.md" rename to "data/1.MySQL\345\210\235\351\230\266/1.\345\205\263\347\263\273\345\236\213\346\225\260\346\215\256\345\272\223/2.\346\225\260\346\215\256\345\272\223\345\237\272\346\234\254\346\246\202\345\277\265/relation.md" diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..23fa08fa2e85908e3f2211d8c6077791a1c98d86 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/config.json" @@ -0,0 +1,11 @@ +{ + "node_id": "mysql-bee8db3dd5354a42bb50277fe4cb2913", + "keywords": [], + "children": [], + "export": [ + "customer_order.json" + ], + "keywords_must": [], + "keywords_forbid": [], + "group": 2 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.json" new file mode 100644 index 0000000000000000000000000000000000000000..35017046022133e3812820e4703b4e05f382b29a --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "ccat", + "source": "customer_order.md", + "notebook_enable": false, + "exercise_id": "37f64868b412458c8c584a7ab7941792" +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.md" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.md" new file mode 100644 index 0000000000000000000000000000000000000000..3a6f2fb30bcc3309ed63510dda95bf65b7fdf76f --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/2. \350\214\203\345\274\217\350\256\276\350\256\241/customer_order.md" @@ -0,0 +1,52 @@ +# 客户和订单 + +Goods 中有客户/订单系统如下: + +```mysql +create table customers +( + id serial primary key, + company_name varchar(256), + address varchar(1024), + city varchar(256), + state varchar(256) +); + +create table products +( + id serial primary key, + description varchar(1024), + unit_price decimal(12, 4) +); + +create table orders +( + id serial primary key, + product_id integer references products (id), + order_date timestamp, + quantity integer, + customer_id integer references customers(id) +); + +``` + +我们希望这个数据库能够允许每个订单包含多种商品,那么应该如何改造? + +## 答案 + +* 添加一个 order_detail 表,引用 order id、product id,增加 quantity 列 +* order 表中删除 product id 和 quantity 列 + +## 选项 + +### A + +将 order 表的修改为以 product id 和 customer id 作为联合主键 + +### B + +删除 orders 表中的 product id 和 quantity 列 + +### C + +在 order 表的主键上加唯一约束 \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..fe723cdeb16afda3939a7cfa33757e49e3c4a258 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/config.json" @@ -0,0 +1,11 @@ +{ + "node_id": "mysql-3e4c837b471c454c90bfbc32445f2780", + "keywords": ["反范式", "anti pattern"], + "children": [], + "export": [ + "slack.json" + ], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.json" new file mode 100644 index 0000000000000000000000000000000000000000..ba161eb430981c42147c3312afbfd7eb1ea57ebc --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "ccat", + "source": "slack.md", + "notebook_enable": false, + "exercise_id": "d62e33f550494f849f87b62acdcf9d0a" +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.md" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.md" new file mode 100644 index 0000000000000000000000000000000000000000..2a2c407d220ce050dec5eddcc6237fb43d6435b5 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/3.\345\217\215\350\214\203\345\274\217\350\256\276\350\256\241/slack.md" @@ -0,0 +1,42 @@ +# 反范式设计 + +反范式优化的主要动机和思路是: + +1. 通过适当增加冗余字段,减少连接查询的次数和复杂度 +2. 对于经常发生的聚合计算,如果对实时正确性要求不高,可以缓存中间结果,减少实时的聚合计算压力 +3. 用适度的写冗余,换取读操作的大幅优化 +4. 适当的放宽索引,可以优化局限于少数字段的查询性能 + +## 答案 + +全部都是 + +## 选项 + +### A + +全部都不对 + +### B + +``` +1, 2, 3 +``` + +### C + +``` +2, 3, 4 +``` + +### D + +``` +2, 3 +``` + +### E + +``` +3, 4 +``` \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..25f0445c8b51fcf27c88e48b3e575cb8a4e18163 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/config.json" @@ -0,0 +1,14 @@ +{ + "node_id": "mysql-a2ddae1b044149ecbb74db3b6eb32721", + "keywords": [ + "middle", + "中间表" + ], + "children": [], + "export": [ + "daily_payment2.json" + ], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.json" new file mode 100644 index 0000000000000000000000000000000000000000..711342c277dbd46a5bc33b9a57f28456733dd431 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "ccat", + "source": "daily_payment2.md", + "notebook_enable": false, + "exercise_id": "71343fd41e5d4af5a5876849e77a3be2" +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.md" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.md" new file mode 100644 index 0000000000000000000000000000000000000000..b5e11be41f1d523830a4df43b23d7f78e5534d29 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/4.\345\242\236\345\212\240\344\270\255\351\227\264\350\241\250/daily_payment2.md" @@ -0,0 +1,108 @@ +# 每日报表优化 + +# 每日报表 + +分析过去一段时间的查询数据,Joe 发现 payment 表 +```mysql +create table payment( + payment_id int primary key auto_increment, + customer_id int, + staff_id int, + rental_id int, + amount decimal(12, 4), + payment_date timestamp +) +``` +每天的订单量很大,下面这个查询的统计过程占用了大多数数据库资源,查询不会 +早于当天,总是在历史上某一个日期段内查询 + +```mysql +select date(payment_date) as day, sum(amount) +from payment +where date(payment_date) between $1 and $2 +group by date(payment_date); +``` + + +怎样优化最有效? + +## 答案 + +建立中间表并建立索引。 + +```postgresql +create table daily_payment(day date primary key , amount decimal(12, 4)); + +insert into daily_payment(day, amount) +select payment_date::date as day, sum(amount) as amount from payment group by day; + +``` + +使用 + +```mysql +select day, amount from view_daily_payment where day between $1 and $2; +``` + +进行查询。并且每天定时执行一次刷新命令 + +```mysql +insert into daily_payment(day, amount) +select date(payment_date) as day, sum(amount) as amount +from payment +where date(payment_date) between DATE_SUB(CURDATE(), INTERVAL 2 DAY) and DATE_SUB(CURDATE(), INTERVAL 1 DAY) +group by day; + +``` + +## 选项 + +### 不会优化 sum 和 group by + +在 payment_date 列上建立索引 + +```mysql +create index idx_payment_date on payment(payment_date); +``` + +### 不会优化 sum + +建立计算列 + +```mysql +alter table payment add day date generated always as ( payment_date::date ) stored +``` + +然后使用它改写查询 + +```mysql +select day as day, sum(amount) +from payment +where day between $1 and DATE_SUB(CURDATE(), INTERVAL 1 DAY) +group by day; +``` + +### 优化了日期查询,但是不会优化统计过程 + +建立表达式索引 + +```mysql +create index idx_payment_day on payment((date(payment_date))); +``` + +### 不做物化,对查询速度不会有显著改善 + +建立视图 + +```mysql +create view view_daily_payment as select date(payment_date) as day, amount from payment; +``` + +然后在视图 view_daily_payment 上执行 + +```mysql +select day, sum(amount) +from view_daily_payment +where day between $1 and date('yesterday') +group by day +``` \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/5.\345\210\206\346\236\220\346\225\260\346\215\256\350\241\250/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/5.\345\210\206\346\236\220\346\225\260\346\215\256\350\241\250/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..c8d5ee885c77b7e0c306f1fde515a9cd5c02a743 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/5.\345\210\206\346\236\220\346\225\260\346\215\256\350\241\250/config.json" @@ -0,0 +1,9 @@ +{ + "node_id": "mysql-cde6eae01784468fa0171ff3042f221f", + "keywords": ["analyze table", "分析数据表"], + "children": [], + "export": [], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/6.\346\243\200\346\237\245\346\225\260\346\215\256\350\241\250/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/6.\346\243\200\346\237\245\346\225\260\346\215\256\350\241\250/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..655b9754463fab38d38390efc30869b61f70e780 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/6.\346\243\200\346\237\245\346\225\260\346\215\256\350\241\250/config.json" @@ -0,0 +1,9 @@ +{ + "node_id": "mysql-fbcc654d6a86452aa349d2ed6003adb6", + "keywords": ["show profile"], + "children": [], + "export": [], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/7.\344\274\230\345\214\226\346\225\260\346\215\256\350\241\250/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/7.\344\274\230\345\214\226\346\225\260\346\215\256\350\241\250/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..55ada99c0637f65edf47d6553059c521907b71d1 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/7.\344\274\230\345\214\226\346\225\260\346\215\256\350\241\250/config.json" @@ -0,0 +1,9 @@ +{ + "node_id": "mysql-f5775462ae784d44a4b2bce5f456311a", + "keywords": ["performance table", "优化数据表"], + "children": [], + "export": [], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git "a/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/8.\346\213\206\345\210\206\346\225\260\346\215\256\350\241\250/config.json" "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/8.\346\213\206\345\210\206\346\225\260\346\215\256\350\241\250/config.json" new file mode 100644 index 0000000000000000000000000000000000000000..fbac6473f24ef0590e2162e263f2094125dcd957 --- /dev/null +++ "b/data/3.MySQL\351\253\230\351\230\266/5.\350\256\276\350\256\241\344\274\230\345\214\226/8.\346\213\206\345\210\206\346\225\260\346\215\256\350\241\250/config.json" @@ -0,0 +1,9 @@ +{ + "node_id": "mysql-ccb6fcf2983b4b3e8b37abbcbc776f21", + "keywords": [], + "children": [], + "export": [], + "keywords_must": [], + "keywords_forbid": [], + "group": 0 +} \ No newline at end of file diff --git a/data/tree.json b/data/tree.json index b23d1184d2ae9b4b388470321f1cbfff05a9f885..79be3fea902b83da4e72d30fd70982c44c5c7cf1 100644 --- a/data/tree.json +++ b/data/tree.json @@ -19,13 +19,13 @@ ], "children": [ { - "数据库基本概念": { - "node_id": "mysql-8e971f3c569a4e56bb83b5d75a2a425f", + "MySQL 基本概念": { + "node_id": "mysql-925f9d57c7794e5391fb790bcdbf43c6", "keywords": [], "children": [], "keywords_must": [ [ - "数据库", + "mysql", "概念" ] ], @@ -34,13 +34,13 @@ } }, { - "MySQL 基本概念": { - "node_id": "mysql-925f9d57c7794e5391fb790bcdbf43c6", + "数据库基本概念": { + "node_id": "mysql-8e971f3c569a4e56bb83b5d75a2a425f", "keywords": [], "children": [], "keywords_must": [ [ - "mysql", + "数据库", "概念" ] ],