回答

收藏

生成查询中的位置与位置

技术问答 技术问答 253 人阅读 | 0 人回复 | 2023-09-12

我知道标题被过度使用了,但我的问题似乎还没有回答。因此,问题是:
+ X; D, p7 J' k- ?  b& H我有一个由四个表(表、行、列、值)组成的表结构,用于重建information_schema行为(以某种方式)。php我正在生成查询来检索数据,结果看起来仍然像一个普通的表:
) t# {, |. c. r, [$ x2 HSELECT   (SELECT value FROM `values` WHERE `col` = "3" and row = rows.id) as "col1", (SELECT value FROM `values` WHERE `col` = "4" and row = rows.id) as "col2" FROM rows WHERE `table` = (SELECT id FROM tables WHERE name = 'table1') HAVING (col2 LIKE "%4%")或者
( E: j9 F5 O- ?+ d4 Z1 U5 B. PSELECT * FROM (SELECT   (SELECT value FROM `values` WHERE `col` = "3" and row = rows.id) as "col1", (SELECT value FROM `values` WHERE `col` = "4" and row = rows.id) as "col2" FROM rows WHERE `table` = (SELECT id FROM tables WHERE name = 'table1')) d WHERE col2 LIKE "%4%"请注意,我将结果列的部分定义为php脚本生成。我这样做并不重要,但我想扩展算法来生成更广泛的查询。我们已经解决了核心问题,我必须决定是否生成查询where或having有些,我知道什么时候同时使用它们,问题是我没有算法,我必须为此做一些额外的检查。但以上两个查询是相等的,我总是可以把任何查询放在子查询中,给它一个别名,然后在新的衍生表上使用where。但我不知道我的表现是否有问题,或者这是否会以意想不到的方式再次出现在我身上。
" P# O4 a& M: R! `  ~我知道他们是如何工作的,应该在哪里更快,但这就是为什么我来这里问。我希望我能理解自己。请原谅我的英语和冗长无用的短语等等。$ r+ o6 g1 L4 h' A
编辑1, V* |/ ^$ q" ?
我已经知道两者之间的区别,这意味着我唯一的问题是使用其他可变数字和大小的定制列,并试图获得相同的结果,这意味着我必须使用可过滤衍生列,同时可以选择包装在子查询和正常使用,这可能会创建一个临时表,然后过滤它。这会影响大型数据库的性能吗?不幸的是,我现在不能测试它,因为我负担不起超过10亿个项目来填写数据库(这将是:rows表中有10亿个values表中有50亿个表,因为每行有5列,5行在cols表格和1行中tables表=总共2 Q# J3 `9 \6 b' s
6,000,006    个条目)$ {+ S2 F! N7 B0 `
现在我的数据库看起来像这样:
( m+ ]% x0 B9 f8 v5 l  c    ---- -------- ----------- ------ | id | name   | title     | dets | ---- -------- ----------- ------ |  1 | table1 | Table One |      | ---- -------- ----------- ------  ---- ------- ------ | id | table | name | ---- ------- ------ |  3 |     1 | col1 ||  4 |     1 | col2 | ---- ------- ------ where `table` is a foreign key from table `tables` ---- ------- ------- | id | table | extra | ---- ------- ------- |  1 |     1 |       ||  2 |     1 |       | ---- ------- ------- where `table` is a foreign key from table `tables` ---- ----- ----- ---------- | id | row | col | value    | ---- ----- ----- ---------- |  1 |   1 |   3 |                                               ||  2 |   1 |   4 |                                                           ||  6 |   2 |   4 |                                                                                                                                                       ||  9 |   2 |   3 | asdfghjk | ---- ----- ----- ---------- where `row` is a foreign key from table `rows` where `col` is a foreign key from table `cols`编辑21 e$ l/ H4 t# C2 e4 Z8 Z7 l: D# F5 d
条件只是演示!
7 J3 i% Y2 N" u! x5 W编辑37 z+ m1 O5 u& t* B) R( z" U
对于只有两行,两者之间似乎有区别,使用having使用0,0008,where的是0.0014-0.0019。我想知道这是否会影响大量行和列的性能  n( @  D8 V0 ?: U
编辑41 ~: h- Z" L3 m
这两个查询的结果是相同的,即:* h. |  d" O6 l8 t, y7 Q7 U
    ---------- ------ | col1     | col2 | ---------- ------ |                                               | 14   || asdfghjk | 24   | ---------- ------                 
. g- F. P8 L" X( Z" u9 B2 _- s0 B) B    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则