IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> django-数据库访问优化-建立数据库的索引 -> 正文阅读

[Python知识库]django-数据库访问优化-建立数据库的索引

? ? ? ? 在必要的字段上创建索引,有助于提升我们的查询速度,django提供了两种为字段创建索引的方式。

一、通过字段选项db_index为字段建立索引

如下,在定义模型类时,通过在字段中将db_index选项设置为turn,则可以为该字段设置索引

from django.db import models


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True, db_index=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)

二、在Meta选项中通过indexes创建索引

index的参数选项

class index(*expressions,?fields=(),?name=None,?db_tablespace=None,?opclasses=(),?condition=None,?include=None)?

在数据库中创建一个索引(B 树)

1、Index.expressions

位置参数expressions允许在表达式和数据库函数上创建函数索引,如下:

例子一:创建名为lower_title_index的索引,索引字段为一个表达式,对name字段的小写字母上进行降序索引

from django.db import models
from django.db.models.functions import Lower


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True, db_index=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)

    class Meta:
        indexes = [
            models.Index(
                Lower('name').desc(),
                name='lower_title_index'
            )
        ]

例子二:创建calc_index的索引,其中索引字段为height字段和weight的乘积,Round('weight')将weight四舍五入为最接近的整数

from django.db import models
from django.db.models import F
from django.db.models.functions import Lower, Round


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True, db_index=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)
    height = models.SmallIntegerField(default=0, verbose_name='身高')
    weight = models.SmallIntegerField(default=0, verbose_name='体重')

    class Meta:
        indexes = [
            models.Index(
                F('height') * F('weight'), Round('weight'), name='calc_index'
            )
        ]

2、Index.fields

需要索引字段的名称列表或元组。默认情况下,索引是以每列的升序创建的。要为列定义一个降序索引,请在字段名前添加一个连字符‘-’。

如下:为字段name创建升序索引,为字段height创建降序索引

from django.db import models
from django.db.models import F
from django.db.models.functions import Lower, Round


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True, db_index=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)
    height = models.SmallIntegerField(default=0, verbose_name='身高')
    weight = models.SmallIntegerField(default=0, verbose_name='体重')

    class Meta:
        indexes = [
            models.Index(
                fields=['name', '-height']
            )
        ]

3、Index.name

索引的名称。如果没有提供name,Django 会自动生成一个名称。为了兼容不同的数据库,索引名不能超过 30 个字符,并且不应该以数字(0-9)或下划线(_)开头。

4、Index.include

一个包含在覆盖索引中作为非键列的字段名称的列表或元组。这允许仅索引扫描,用于只选择包含的字段(include)和只通过索引字段过滤的查询(fields)。

例如:对name字段创建索引,在对name进行字段查询时,会同时选择height进行字段查询,但是获取到的数据只包含name。

注意:使用include时,Index参数选项中必须包含Index.name参数选项

from django.db import models
from django.db.models import F
from django.db.models.functions import Lower, Round


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True, db_index=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)
    height = models.SmallIntegerField(default=0, verbose_name='身高')
    weight = models.SmallIntegerField(default=0, verbose_name='体重')

    class Meta:
        indexes = [
            models.Index(
                name='covering_index',
                fields=['name'],
                include=['height']
            )
        ]

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:05  更:2022-10-31 11:56:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:24:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码