Py学习  »  DATABASE

mysql中类操作的索引

Sidharth Samant • 5 年前 • 1427 次点击  

我知道 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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44243
 
1427 次点击  
文章 [ 1 ]  |  最新文章 5 年前
scaisEdge
Reply   •   1 楼
scaisEdge    6 年前

mysql索引字符串的左侧。

如果查询右侧使用通配符,则字符串列可以使用索引:

 SELECT * FROM your_table WHERE field LIKE "text%" # can use an index

但请记住,索引有767字节的限制

来自mysql文档

B树索引可用于表达式中的列比较 使用=、>、>=、<、<=,或在运算符之间使用。索引也可以是 如果like的参数是常量字符串,则用于like比较 不是以通配符开头的。

https://dev.mysql.com/doc/refman/8.0/en/index-btree-hash.html