【发布时间】:2019-09-05 04:55:10
【问题描述】:
我知道 varchar_pattern_ops 存在于 Postgresql 中,用于在 LIKE 查询中进行快速、基于索引的搜索,但 MySQL 是否有类似的功能?
我目前有一个 Django-MySQL 设置,我有这个查询,它在一个非索引字段上运行并使用 BINARY LIKE 操作,并且需要一分钟多的时间才能完成。
我的查询是从文本开头的部分搜索 - text%。
这是表结构。该表实际上包含 20 多个字段,但我只包含了主键和我正在搜索的字段
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+---------------+------+-----+--
| id | varchar(255) | NO | PRI | NULL | |
| mid | varchar(255) | NO | MUL | NULL | |
这是查询 -
select count(*) from table where mid binary like 'text%';
这些是索引 -
PRIMARY KEY index has cardinality 102820460
mid index has cardinality 756032
【问题讨论】:
-
谢谢,虽然我的问题比这更受限制。我已经更新了这个问题。我的查询只是从测试开始的部分搜索。
-
在这种情况下,索引应该可以工作..因为 initil 部分可以与索引匹配..尝试在列上添加一个简单的索引,但请记住对于索引有 767 个字节的限制跨度>
-
原因可能是该索引中值的基数,导致选择性不好。你可以试试
FORCE INDEX。另外,在这里找到解释:logicalread.com/mysql-index-cardinality-mc12 -
另外,提到的 LIKE 搜索是唯一的条件吗?请发布表结构(包括索引)和您的完整查询。