新建个mysql数据库并加索引sql语句
以下是一个简单的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'); 这种设计可以有效地减少原始表的字段数量,从而提高查询性