我有一個要搜索的文章資料庫。我一直在使用普通的 Django ORM 進行搜索,這變得越來越慢,然后我對 Django 有了一些了解Indexes。我正在使用MySQL,現在我知道使用 MYSQL 我無法將索引欄位放入我所面臨的堆疊問題中TextField描述的此處。但是就我而言,我無法將其更改為CharField.
我正在閱讀 MyQSL Docs 里面說
MySQL 不能索引 LONGTEXT 列在 key 部分上沒有前綴長度,并且在功能 key 部分中不允許前綴長度。
因此我的理解是,由于TextField在 Django 中是LONGTEXT用于 MYSQL 的,所以我在這里遇到了這個Django-MySQL 包,并認為如果我可以使用這個包更改LONGTEXT為MEDIUMTEXT使用這個包,這可能會得到解決。所以我更新的模型我這樣做了
class MyModel(Model):
........
document = SizedTextField(size_class=3)
但是,我在申請時仍然看到相同的錯誤python manage.py makemigrations
django.db.utils.OperationalError: (1170, "BLOB/TEXT column 'document' used in key specification without a key length")
我該如何解決這個問題?
uj5u.com熱心網友回復:
所有這些相關型別、TEXT、MEDIUMTEXT和LONGTEXT,都太大而無法在不指定前綴的情況下進行索引。索引前綴意味著只有字串的前 N ??個字符包含在索引中。像這樣:
create table mytable (
t text,
index myidx (t(200))
);
此示例中的前綴長度為 200 個字符。所以只有前 200 個字符包含在索引中。通常這足以提高性能,除非您有大量前 200 個字符相同的字串。
MySQL 支持的最長前綴取決于存盤引擎和行格式。舊版本的 MySQL 支持最多 768 位元組的索引前綴,這意味著更少的字符數取決于您使用的是 utf8 還是 utf8mb4 等多位元組字符集。最新版本的 MySQL 默認采用更現代的行格式,索引最多支持 3072 位元組,每個字符再次減少 3 或 4 位元組。
我不是普通的 Django 用戶,所以我嘗試瀏覽有關在模型類上定義索引的檔案。但是考慮到幾秒鐘的閱讀,我看不到為長字串列上的索引宣告前綴的選項。
我認為您的選擇是以下之一:
- 將列更改為可以索引的較短字串列
- 使用 MySQL 客戶端創建索引,而不是使用 Django 遷移
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/428853.html
