- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何提高以下查询的性能?
class Worker(models.Model):
name = models.CharField(max_length=32, db_index=True)
# This line is slow:
Worker.objects.filter(name__startswith='John')
我已经为模型添加了一个索引,但是......它根本没有被使用。 但是,当我在没有 startswith
的情况下进行普通过滤时,索引确实会起作用:
# This line is fast:
Worker.objects.filter(name='John')
为什么 startswith
不使用索引?
最佳答案
问题是 startswith
表达式转换为包含 LIKE
运算符的 SQL 查询,它没有利用默认索引。
解决方案:添加一个带有特殊 operator class 的附加索引:
CREATE INDEX "appname_model_field_like_idx"
ON "appname_model" ("fieldname" varchar_pattern_ops);
一步一步:
首先,创建一个空迁移:
python3 manage.py makemigrations appName --empty
添加自定义 RunSQL 命令:
class Migration(migrations.Migration):
dependencies = [
('stats', '0002_auto_2010213_0159.py'),
]
operations = [
migrations.RunSQL(
sql=r'''CREATE INDEX "appname_model_field_like_idx"
ON "appname_model" ("fieldname" varchar_pattern_ops);''',
reverse_sql=r'DROP INDEX "appname_model_field_like_idx";'
),
]
关于python - Django — 提高 `startswith` 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682773/
我使用的是 Java 版本 1.8.0_31。 我正在尝试使用 FileVisitor 接口(interface)递归访问目录树。该程序应打印 C:/books 中文件名以“Ver”开头的所有文件的名
我有一个 Java 方法,它接受类型的参数 interface Function2 { TR apply(TP1 p1, TP2 p2) } 以及像这样的 Java 方法 boolean cont
我有一个给我带来麻烦的功能。下面的代码返回错误消息“无法读取未定义的属性‘值’”。该函数应该只搜索帐户列表中的值并返回以提交的字符串开头的值。在示例中,提交“000555”应返回 0。 var acc
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
所以我有一个问题。今天我开始优化我的代码并达到了这一点,例如: return !this.message.startsWith("/"); 请遵循我从 here 获取优化技巧的地方。 (链接到规则)
我仍在使用 Java 开发一个项目,想问问是否有人可以帮助我? 我问我是否有可能用“startsWith”来检查一个包含多个字母的字符串? 喜欢: if (string Alpha.startsWi
类项目要求我们读取单个文本文件中包含的 10,514 首歌曲的标题、艺术家和歌词。该项目的当前部分让我们编写一个有序的展开链接列表并在标题字段上运行搜索。还编写了比较器来按标题对列表进行排序。我们必须
我加入了两个列表,一个包含总线路径,另一个包含作为总线子路径的磁盘路径。所以基本上我想加入 diskpath.startswith(buspath)。问题是 Join On 只允许在 equals 的
我有这个代码: for (var i = 0; i TypeError: r[e].startsWith is not a function > at js-cf2cc68….min.js.g
我正在阅读 Microsoft 的 Best Practices for Using Strings in the .NET Framework . 它给出了以下示例作为对 StringCompari
我正在寻找一个集合来存储键值对,其中值应该根据键 startswith 条件返回。 例如对于给定的集合:(a,123) (ab,234) (abcd,5434) 如果我执行 map.get(a) 它应
有没有办法检查一个字符串是否以不同的字母开头,而不是只检查一次。 下面是我当前的代码: myString.startsWith('M') || myString.startsWith('L
函数:startswith() 作用:判断字符串是否以指定字符或子字符串开头 1、函数说明 语法:string.startswith(str, beg=0,end=len(string))
在网站上没有找到这个,但我确实找到了 open bug on Github在撰写本文时,唯一的解决方案是使用 GatsbyImage。学习将 Gatsby 项目从 2 转换为 3 我已经安装了 gat
我是 PowerShell 的新手,如果字符串不是以特定字符开头,我正在尝试运行一些代码,但是我无法让它处理多个字符。 这是工作正常的代码。 if (-Not $recdata.StartsWith
我需要查看文本的第一行是否以 By 开头,如果是,则剪切整行并将其存储在变量中,并删除所有空白行,直到下一段开始。查找 By 的方法需要不区分大小写,并且前面也可能有一些空格。如果第一行不是以 By
当我像这样使用 odata 时:$filter=startswith(tolower(firstName),tolower('A'))它不起作用。 我想知道tolower和toupper是否可以和st
这个问题在这里已经有了答案: Conditional statement inside a match case (2 个答案) 关闭 4 个月前。 有没有办法像下面这样使用匹配大小写来选择字符串结
我有一个这样的查找: Lookup plsBase = (Lookup)(Query($@"Select ...").ToLookup(s => s.ip, o => o)); 当我通过按键访
当我像这样使用 odata 时:$filter=startswith(tolower(firstName),tolower('A'))它不起作用。 我想知道tolower和toupper是否可以和st
我是一名优秀的程序员,十分优秀!