gpt4 book ai didi

php - SQL 使用 cast 而不是 int 字段

转载 作者:行者123 更新时间:2023-11-29 13:55:19 25 4
gpt4 key购买 nike

当尝试过滤或排序结果而不是在开头使用 int 字段时,在 where 子句中使用“string field with cast”是否会产生显着的性能结果?因为我希望 meta 也包含字符串值,

我正在考虑在单独的表中分离元字符串和元 int,或者只使用一个字符串表,并为 int 值进行强制转换。

就像 wp_postmeta 一样工作?

META TABLE ==
meta_id | post_id | meta_key | meta_value
1 | 101 | quantity | 8
2 | 101 | price | 100
3 | 102 | quantity | 7
4 | 102 | price | 56
5 | 103 | quantity | 12
6 | 103 | price | 256

POST TABLE ==
post_id | about
101 | Pencil | Luxurious pencil only for you
102 | Eraser | All your mistakes, gone!
103 | Pen | Unrivaled penmanship, stronger than sword.

查询:

select 
p.post_id,
p.name,
p.about,
m1.meta_value,
m2.meta_value
from post_table p
inner join meta_table m1
on m1.post_id = p.post_id and m1.meta_key = 'quantity'
inner join meta_table m2
on m2.post_id = p.post_id and m2.meta_key = 'price'
where CAST(m1.meta_value as int) < 10
order by CAST(m1.meta_value as int) asc

谢谢

最佳答案

来自Index documentation :

Comparison of dissimilar columns (comparing a string column to a temporal or numeric column, for example) may prevent use of indexes if values cannot be compared directly without conversion.

在您的例子中,表达式 CAST(m1.meta_value as int) < 10可能不会使用任何可用于满足该谓词的索引,因为您没有在其定义的类型中引用 meta_value。

当列用于存储多种类型的数据(字符串、整数、日期等)时,就会出现这些类型的问题。通常,为数据使用正确的数据类型可以让数据库按预期工作,并让数据库做出可以实现最佳查询执行的假设。

如果您想调整此特定查询,请考虑运行 EXPLAIN select ...并分析或发布结果。

关于php - SQL 使用 cast 而不是 int 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com