后端开发全栈工程师通往架构师之路闲杂

第三个模块 MySQL-UUID、分词字典、MySQL全文索引

2016-09-14  本文已影响264人  霄峰

论mysql5.7.13性能优化之索引优化
mysql优化(1)show命令 慢查询日志 explain profiling
mysql优化(2)索引优化 配置优化
源码 360云盘 (提取码:8d71)

一、 UUID(全局唯一ID)

https://packagist.org/搜索uuid

软件包名:

ramsey/uuid

安装

composer require ramsey/uuid

使用:

<?php
require 'vendor/autoload.php';

use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;

try {

    // Generate a version 1 (time-based) UUID object
    $uuid1 = Uuid::uuid1();
    echo $uuid1->toString() . "\n"; // i.e. e4eaaaf2-d142-11e1-b3e4-080027620cdd

    // Generate a version 3 (name-based and hashed with MD5) UUID object
    $uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net');
    echo $uuid3->toString() . "\n"; // i.e. 11a38b9a-b3da-360f-9353-a5a725514269

    // Generate a version 4 (random) UUID object
    $uuid4 = Uuid::uuid4();
    echo $uuid4->toString() . "\n"; // i.e. 25769c6c-d34d-4bfe-ba98-e0ee856f3e7a

    // Generate a version 5 (name-based and hashed with SHA1) UUID object
    $uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net');
    echo $uuid5->toString() . "\n"; // i.e. c4a760a8-dbcf-5254-a0d9-6a4474bd1b62

} catch (UnsatisfiedDependencyException $e) {

    // Some dependency was not met. Either the method cannot be called on a
    // 32-bit system, or it can, but it relies on Moontoast\Math to be present.
    echo 'Caught exception: ' . $e->getMessage() . "\n";

}

二、 分词字典

可以自行百度下载php分词字典!
https://yunpan.cn/ckQ6adR7zRRfY (提取码:69b8)

三、 MySQL全文索引(解决全文索引查询关键词最小长度限制)

说明:

SELECT * FROM 表名 WHERE MATCH(全文索引字段) AGAINST(‘查询单词’ IN Boolean Mode);
分表:将一个大的数据表水平分割成32张表,利用UUID均匀插入32张表中;
原理:UUID生成32位16进制字符串,取前两位与32取余,得到的值拼接到表名的后面。
UUID: e564e388-7589-4484-a51a-9522259f751e
前两位:e5
echo 0xe5 % 32;//5 则表的名称:表名_5
其中:0x代表处进制。

注意:

  1. MySQL中不要使用多表连查(会产生笛卡尔乘积)当数据量大的时候严重影响性能。
  2. MySQL中不要使用like查询,因为它不会使用到索引!

参考 http://www.bubufx.com/detail-1351689.html

一、设置条件
1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引
(新版本MYSQL5.6的InnoDB支持全文索引)
2.字段类型:charvarchartext

二、配置MySQL配置文件
MySQL全文索引查询关键词最小长度限制

[mysqld]
innodb_ft_min_token_size=1  /*这个是才是InnoDB引擎的全文索引最小长度设置*/
ft_min_word_len=1 /*MyISAM引擎的*/

保存后重启MYSQL,执行SQL语句

SHOW VARIABLES like '%ft%';

查看ft_min_word_len是否设置成功
注:重新设置配置后,已经设置的索引需要重新设置生成索引

三、创建表、插入数据

  1. 建表SQL语句:
//创建文章表
CREATE TABLE `article_0` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uuid` char(64) NOT NULL,
  `content` text NOT NULL,
  `addtime` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
//创建文章关键词表
CREATE TABLE `article_index` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uuid` char(64) NOT NULL,
  `keywords` text NOT NULL,
  `addtime` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uuid_index` (`uuid`),
  FULLTEXT KEY `keywords_index` (`keywords`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
  1. 插入数据
insert into article_0 (uuid, content, addtime) values('e564e388-7589-4484-a51a-9522259f751e', '首次见面,沈从文便请萧乾到东安市场的小馆中吃饭,沈从文手写菜名后,萧乾欲收藏,对伙计说:这个菜单给我吧,我再给您抄一遍。沈从文则说:“要菜单干吗?以后我会给你写信,写很长的信。”', '1473782670');
insert into article_index (uuid, keywords, addtime) values('e564e388-7589-4484-a51a-9522259f751e', '菜单 见面 市场 吃饭 手写 收藏 这个 以后 我会 写信', '1473782670')
  1. 全文索引-关键词查询
SELECT * FROM article_index WHERE MATCH (keywords) AGAINST ('见面' in Boolean Mode);
+----+--------------------------------------+-----------------------------------------------------------------------+------------+
| id | uuid                                 | keywords                                                              | addtime    |
+----+--------------------------------------+-----------------------------------------------------------------------+------------+
|  2 | 2600d27c-ba84-4f1d-ac97-b2656ed5bcfd | 菜单 见面 市场 吃饭 手写 收藏 这个 以后 我会 写信                     | 1473782670 |
|  7 | 5ca114fa-cb08-4293-87a4-c4abbb80b965 | 菜单 见面 市场 吃饭 手写 收藏 这个 以后 我会 写信                     | 1473782670 |
| 13 | e564e388-7589-4484-a51a-9522259f751e | 菜单 见面 市场 吃饭 手写 收藏 这个 以后 我会 写信                     | 1473782670 |
+----+--------------------------------------+-----------------------------------------------------------------------+------------+
上一篇 下一篇

猜你喜欢

热点阅读