【问题标题】:mysql binary comparison doesnt use indexmysql二进制比较不使用索引
【发布时间】:2011-04-30 13:35:49
【问题描述】:

我有以下疑问:

EXPLAIN EXTENDED SELECT *
FROM (
`photo_data`
)
LEFT JOIN `deleted_photos` ON `deleted_photos`.`photo_id` = `photo_data`.`photo_id`
WHERE photo_data.photo_id = 'UKNn'
AND `deleted_photos`.`photo_id` IS NULL

不幸的是,我不得不使用二进制来比较这个 photo_id(它是从不同的外部服务传递给我的)。这样我就可以避免从数据库中拉出“uknn”而不是“UKNn”。

问题是,当我进行解释时,我看到二进制的使用不使用索引。如果我取出二进制文件,它将使用 photo_id 的索引。有没有办法可以使用二元选项并使用索引?

【问题讨论】:

    标签: sql mysql select indexing binary


    【解决方案1】:

    MySQL 使用列的排序规则作为索引。具有非二进制排序规则的索引对于二进制查找没有用处,因为顺序可能不同。

    您可以将列本身更改为二进制排序规则:

    ALTER TABLE YourTable MODIFY
       YourColumn VARCHAR(4)
       CHARACTER SET latin1
       COLLATE latin1_bin;
    

    那么索引对于二进制查找很有用。

    【讨论】:

      【解决方案2】:

      如果您只需要以区分大小写的方式比较字段值 - 您可以专门更改该字段的排序规则。

      ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_bin
      

      ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_general_cs
      

      【讨论】:

      • 有没有办法接受你的回答?你们几乎在同一时间得到了相同的答案
      猜你喜欢
      • 2023-03-17
      • 2011-06-09
      • 2022-11-25
      • 2013-04-23
      • 1970-01-01
      • 2020-10-25
      • 2012-02-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多