当前位置:首页 > 日记本 > 正文内容

新建个mysql数据库并加索引sql语句

zhangchap1年前 (2023-04-03)日记本206
以下是一个简单的MySQL数据库设计,具有id、qid、title、content和url字段。id被设置为自动增长主键,并且qid字段设置为UNIQUE,以确保其唯一性。


CREATE DATABASE IF NOT EXISTS `baidu_zhidao` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
USE `baidu_zhidao`;


CREATE DATABASE IF NOT EXISTS `huamu` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
USE `huamu`;
CREATE TABLE IF NOT EXISTS `baidu_zhidao` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `qid` INT(11) UNSIGNED NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  `content` TEXT NOT NULL,
  `url` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_qid` (`qid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


这里创建了一个名为 `huamu` 的数据库,并在其中创建了一个名为 `baidu_zhidao` 的表。表中包含五个字段,分别是 `id`、`qid`、`title`、`content` 和 `url`,其中 `id` 是自动增长的主键,`qid` 是唯一键。

要向该表中插入记录,可以使用以下SQL语句:
INSERT INTO `baidu_zhidao` (`qid`, `title`, `content`, `url`) 
VALUES ('some-qid', 'some-title', 'some-content', 'some-url');

确保每个qid值是唯一的,否则将引发唯一性约束异常。


以下是为 title 字段添加索引的 SQL 语句示例:
ALTER TABLE `my_table` ADD INDEX `idx_title` (`title`);

可以将 my_table 替换为你实际使用的表名,将 idx_title 替换为你想要创建的索引名称。这条 SQL 语句将在 title 字段上创建一个单列 B-Tree 索引,可以加快根据 title 进行查询的速度。

第二种在数据量比较大的情况下:

CREATE TABLE IF NOT EXISTS `my_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `qid` varchar(255) NOT NULL UNIQUE,
  `title_id` int(11) NOT NULL,
  `content_id` int(11) NOT NULL,
  `url` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`title_id`) REFERENCES `titles`(`id`),
  FOREIGN KEY (`content_id`) REFERENCES `contents`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

标题表:
CREATE TABLE IF NOT EXISTS `titles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

内容表:
CREATE TABLE IF NOT EXISTS `contents` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` longtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

在此设计中,titleid和contentid字段将作为外键引用titles和contents表中的对应记录。这样,我们可以对titles和contents表进行优化,使得它们可以更好地处理write-heavy的负载。
当需要插入新记录时,需要先在titles和contents表中插入对应的记录,然后使用它们的id值来填充mytable表中的titleid和contentid字段。
以下是一个示例:
-- 在titles表中插入新记录
INSERT INTO `titles` (`title`) VALUES ('some-title');

-- 获取插入记录的id
SELECT LAST_INSERT_ID();

-- 在contents表中插入新记录
INSERT INTO `contents` (`content`) VALUES ('some-content');

-- 获取插入记录的id
SELECT LAST_INSERT_ID();

-- 在my_table表中插入新记录,并引用titles和contents表中的记录
INSERT INTO `my_table` (`qid`, `title_id`, `content_id`, `url`) 
VALUES ('some-qid', <title_id>, <content_id>, 'some-url');

这种设计可以有效地减少原始表的字段数量,从而提高查询性


分享给朋友:

相关文章

火狐添加自定义搜索引擎

直接网址搜索自定义添加:https://mycroftproject.com/...

网络编辑工具箱注册ComCtl32.ocx

1.把ComCtl32.ocx放到c:\Windows\SysWOW64,注:需要管理员权限 2.打开C:\Windows\System32 找到 cmd.exe 鼠标右键管理员身份...

python补全网址代码示例

from urllib.parse import urljoin absurl = urljoin(backend,url) #backend:根...

python 随机生成时间戳写入txt文件/运行sql语句

import time from random import randint with open('time.txt', ...

python 发布文章 随机分类(choice)

from random import choice catid = choice([5,6]) #choice 函数从列表中随机提取...

python url.parse模块编码解码

from urllib.parse import quote,unquote,urlencode # 对汉字进行编码使用 quote ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。