【问题标题】:Is this the best index possible?这是可能的最佳索引吗?
【发布时间】:2014-03-26 06:34:58
【问题描述】:

我有一张这样的桌子:

创建表ph_numbers ( service_area_code int(2) 默认为空, number varchar(20) 默认为空, phone_type int(1) 默认为空, date_created 日期时间默认为空, 键idx_number (number(4)) ) ENGINE=InnoDB 默认字符集=latin1

我想根据数字列查询这张表。该号码是一个有 10 位数字的电话号码,其中前 4 位数字可用作操作员标识符。该表包含大约 2 亿行。

我可以做些什么来改进查询?

【问题讨论】:

    标签: mysql sql select indexing


    【解决方案1】:

    您可以做些什么来改进查询是使number 成为表的主键。在 InnoDB 中,主键查找比二级索引查找更便宜。

    但这意味着您不能为 number 使用前缀索引。

    我想知道您为什么将 VARCHAR(20) 用于 10 位数字。 VARCHAR(10) 不是更贴合吗?

    【讨论】:

    • 我会试试你的建议。
    • 我使用 varchar 20 代替 10,因为我从中获取数据的来源有时可能不可靠,并且可能提供长度超过 10 的电话号码。我不想丢失数据在这种情况下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多