【问题标题】:Zip code filter per seller - mysql每个卖家的邮政编码过滤器 - mysql
【发布时间】:2015-04-23 04:40:52
【问题描述】:

我正在用 PHP 实现一个 Web 服务,它将检索在某些邮政编码交货的卖家列表。我想知道比我目前正在做的更好的方法。

邮政编码示例表(ziptable):

---------------------- |卖家 ID |邮政编码 | ---------------------- | 101 | 110012 | ---------------------- | 101 | 110023 | ---------------------- | 102 | 110023 | ----------------------

现在我使用以下查询来获取邮政编码为 110023 的卖家列表:

SELECT * FROM 卖家 s, ziptable z 其中 z.zipcode = 110023 AND s.id = z.seller_id ;

有没有更好的方法通过更改数据库架构或 SQL 查询来获得相同的结果?

【问题讨论】:

    标签: php mysql sql database-design


    【解决方案1】:

    您实际上不需要从 zipcodes 表中返回任何列,但除此之外,使用适当的索引就可以了。请注意,我们通常会这样写:

    SELECT s.* 
      FROM ziptable z
      JOIN sellers s
        ON z.seller_id = s.id
     WHERE z.zipcode = 110023;
    

    【讨论】:

    • 对。谢谢。我应该索引哪些字段?
    • 嗯,你应该已经在 (z.seller_id,z.zipcode) 上有一个复合 PRIMARY KEY,在 s.seller_id 上有一个 PRIMARY KEY,所以真的没有什么可以索引了。跨度>
    • 显式的join 语法比不那么强大的comma-in-the-from 子句方法更受欢迎。
    • @Strawberry - 错误 -- zipcode 的主键需要反转:(zipcode, seller_id)。这是因为优化器将以ziptable 开头并搜索带有zipcode = 110023 的行(显然不是在美国,因为它是六位数??)。然后它将JOIN 变为sellers
    • @Shubham 见上面 RJ 的评论。
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2013-12-10
    • 2013-06-15
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多