首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
142 阅读
2
php接口优化 使用curl_multi_init批量请求
132 阅读
3
2024年备考系统架构设计师
102 阅读
4
《从菜鸟到大师之路 ElasticSearch 篇》
102 阅读
5
PHP 文件I/O
89 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
785
篇文章
累计收到
8
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
785
篇与
的结果
2023-12-07
JavaScript的64位浮点数
JavaScript的64位浮点数一、JavaScript的64位浮点数 JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。 所以,1与1.0是相同的,是同一个数。1 === 1.0 // true这就是说,JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。0.1 + 0.2 === 0.3// false0.3 / 0.1// 2.9999999999999996二、IEEE754 浮点数标准的制定背景 早期人们提出浮点数定义时,每个计算机厂商会定义自己的浮点数规则,不同厂商对同一个数表示出的浮点数是不一样的。这就会导致,一个程序在不同厂商下的计算机中做浮点数运算时,需要先转换成这个厂商规定的浮点数格式,才能再计算,这也必然加重了计算的成本。于是,1985年,IEEE 组织推出了浮点数标准,就是我们经常听到的 IEEE754 浮点数标准,这个标准统一了浮点数的表示形式,并提供了 2 种浮点格式:单精度浮点数 float:32 位,符号位 s 占 1 bit,指数 e 占 8 bit,小数数 f 占 23 bit双精度浮点数 float:64 位,符号位 s 占 1 bit,指数 e 占 11 bit,小数 f 占 52 bit三、JavaScript浮点数在内存中的结构根据国际标准IEEE 754 ,JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的:第一部分(蓝色):用来存储符号位(sign),第1位:符号位,0表示正数,1表示负数第二部分(绿色):用来存储指数(exponent),第2位到第12位(共11位):指数部分第三部分(红色):用来存储小数(fraction),第13位到第64位(共52位):小数部分(即有效数字) 符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度。四、 64位浮点数表示数字的公式浮点数是采用科学计数法来表示一个数字的,它的格式可以写成这样:(-1)^s f 2^e符号部分 -1 or 1 f的范围为1<=f<2 使用52位表示指数有正有负,指数位长度为11比特,所以能表示的数字范围为0~2047假设我们将十进制数 25.125 转换为浮点数,转换过程就是这样的(D代表十进制,B代表二进制):整数部分:25(D) = 11001(B)小数部分:0.125(D) = 0.001(B)用二进制科学计数法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)所以符号位 s = 0,小数 f = 1.001001(B) = 001001(去掉1,隐藏位),指数 e = 4+1023(中间值) = 1027(D) = 10000000011(B)。按照内存结构中浮点数定义的规则,填充到 64 bit 上。五 、52位为什么可以表示53位小数(精度)IEEE754规定小数部分第一位隐含为1,不写,因为所有二进制第一个有效数字都是1。所以加上省略的1位,精度位数是 53 bit。所以在 0 ~ 2^53 内的整数都是有效数字,算上第1位符号位,就可以得到 -2^53 ~ 2^53 都是有效数字。六、浮点数能精确表示的范围Math.pow(2,53) - 1 // 最大 Number.MAX_SAFE_INTEGER // 常数表示- (Math.pow(2,53) - 1) // 最大 Number.MIN_SAFE_INTEGER // 常数表示七、Number的MAX_VALUE我们知道了 js 中数的表示方法,那么他能表示的最大的数是多少呢,聪明的你肯定会想到是下面这个数:0 11111111111 1111111111111111111111111111111111111111111111111111但是,这种情况在 IEEE754 标准中表示 NaN,最大的数其实是:0 11111111110 1111111111111111111111111111111111111111111111111111转换成二进制的科学计数法表示如下:1.1111111111111111111111111111111111111111111111111111 * 2^(2046 - 1023)= 1.1111111111111111111111111111111111111111111111111111 * 2^1023= 11111111111111111111111111111111111111111111111111111 * 2^971= (2^53 - 1) * 2^971= 1.7976931348623157e+308我们在浏览器调试窗口里面验证下:(Math.pow(2, 53) - 1) * Math.pow(2, 971) // 1.7976931348623157e+308(Math.pow(2, 53) - 1) * Math.pow(2, 971) === Number.MAX_VALUE // true八、Number的MAX_SAFE_INTEGERMAX_SAFE_INTEGER 表示在 JavaScript 中最大的安全整数。所谓的安全,就是大于这个数的整数不一定可以精确表示。他的值其实是 2^53 - 1,表示成二进制为:0 10000110100 1111111111111111111111111111111111111111111111111111表示成二进制的科学计数法为:1.1111111111111111111111111111111111111111111111111111 * 2^52= 11111111111111111111111111111111111111111111111111111比这个数大一的数为:100000000000000000000000000000000000000000000000000000= 1.00000000000000000000000000000000000000000000000000000 * 2^53在计算机中表示成:0 10000110101 0000000000000000000000000000000000000000000000000000 0注意到我们省去掉了一位,按照向偶舍入的规则,不会产生进位。所以这个数还是可以精确表示的,没有问题。我们再来看看比 MAX_SAFE_INTEGER 大二的数:100000000000000000000000000000000000000000000000000001= 1.00000000000000000000000000000000000000000000000000001 * 2^53在计算机中表示成:0 10000110101 0000000000000000000000000000000000000000000000000000 1注意到我们省去掉了一位,按照向偶舍入的规则,还是不会产生进位。这个时候就有问题了,这个数跟刚才那个数竟然是相等的,我们来验证下:const a = Number.MAX_SAFE_INTEGERa + 1 === a + 2 // true所以,在进行大数的相关运算的时候要小心了,最好是使用 BigInt 类型。
2023年12月07日
8 阅读
0 评论
0 点赞
2023-12-07
什么是css初始化
什么是css初始化CSS初始化是指重设浏览器的样式。因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。每次新开发网站或新网页时候通过初始化CSS样式的属性,为我们将用到的CSS或html标签更加方便准确,使得我们开发网页内容时更加方便简洁,同时减少CSS代码量,节约网页下载时间。css初始化的好处:提高编码质量初始化CSS为我们节约网页代码,节约网页下载时间;还会使得我们开发网页内容时更加方便简洁,不用考虑很多。 如果不初始化,整个页面做完会很糟糕,重复的css样式很多。我们在开发比较复杂的网页时候就不会知道自己是否已经设置了此处的CSS属性,是否和前面的CSS属性相同,是否统一整个网页的风格和样式。(学习视频分享:css视频教程)最简单的初始化方法就是: * {padding: 0; margin: 0;} 。有很多人也是这样写的。这确实很简单,但有人就会感到疑问:*号这样一个通用符在编写代码的时候是快,但如果网站很大,CSS样式表文件很大,这样写的话,他会把所有的标签都初始化一遍,这样就大大的加强了网站运行的负载,会使网站加载的时候需要很长一段时间。我们可以直接使用下面的代码初始化css。 css初始化代码:/*css 初始化 */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img { margin:0; padding:0; } fieldset, img,input,button { border:none; padding:0;margin:0;outline-style:none; } ul, ol { list-style:none; } input { padding-top:0; padding-bottom:0; font-family: "SimSun","宋体";} select, input { vertical-align:middle; } select, input, textarea { font-size:12px; margin:0; } textarea { resize:none; } img {border:0; vertical-align:middle;} table { border-collapse:collapse; } body { font:12px/150% Arial,Verdana,"\5b8b\4f53"; color:#666; background:#fff } .clearfix:before,.clearfix:after{ content:""; display:table; } .clearfix:after{clear:both;} .clearfix{ *zoom:1;/*IE/7/6*/ } a{color:#666; text-decoration:none; } a:hover{color:#C81623;} h1,h2,h3,h4,h5,h6{text-decoration:none;font-weight:normal;} s,i,em{font-style:normal;text-decoration:none;} .col-red{color: #C81623!important;} /*公共类*/ .w{ width: 1210px;margin:0 auto; } .fl { float:left } .fr { float:right } .al { text-align:left } .ac { text-align:center } .ar { text-align:right } .hide { display:none }各大网站CSS初始化代码集合CSS初始化可以简单快速的实现常用标签的属性设定,尽量减少各浏览器之间的兼容性问题1、百度 CSS初始化 https://www.baidu.com统一初始化 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin: 0; padding: 0 } html { color: #000; overflow-y: scroll; overflow: -moz-scrollbars } body, button, input, select, textarea { font: 12px arial } h1, h2, h3, h4, h5, h6 { font-size: 100% } em { font-style: normal } small { font-size: 12px } ul, ol { list-style: none } a { text-decoration: none } a:hover { text-decoration: underline } legend { color: #000 } fieldset, img { border: 0 } button, input, select, textarea { font-size: 100% } table { border-collapse: collapse; border-spacing: 0 } img { -ms-interpolation-mode: bicubic } textarea { resize: vertical } 其他常用CSS样式 .left { float: left } .right { float: right } .overflow { overflow: hidden } .hide { display: none } .block { display: block } .inline { display: inline } .error { color: #F00; font-size: 12px } label, button { cursor: pointer } .clearfix:after { content: '\\20'; display: block; height: 0; clear: both } .clearfix { zoom: 1 } .clear { clear: both; height: 0; line-height: 0; font-size: 0; visibility: hidden; overflow: hidden } .wordwrap { word-break: break-all; word-wrap: break-word } .s-yahei { font-family: arial, 'Microsoft Yahei', '微软雅黑' }2、腾讯首页 CSS初始化 http://www.qq.com统一初始化body, dd, dl, fieldset, form, h1, h2, h3, h4, h5, h6, input, legend, ol, p, select, td, textarea, th, ul { margin: 0; padding: 0 } body { font: 12px SimSun, "Arial Narrow", HELVETICA; background: #fff; -webkit-text-size-adjust: 100% } a { color: #172c45; text-decoration: none } a:hover { color: #cd0200; text-decoration: underline } em { font-style: normal } li { list-style: none } img { border: 0; vertical-align: middle } table { border-collapse: collapse; border-spacing: 0 } p { word-wrap: break-word }其他常用CSS样式.ind { text-indent: 2em } .ind10 { text-indent: 10px } .noborder { border: 0 } .Q-red a, a.Q-red { color: #bd0a01 !important } .Q-black a, a.Q-black { color: #000 !important } .Q-bold { font-weight: 700 !important } .Q-pList ul:after, .Q-pList:after, .Q-tList ol:after, .Q-tList ul:after, .Q-tList:after, .Q-tpList ul:after, .Q-tpList:after, .Q-tpWrap:after, .bd:after, .cf:after, .ft:after, .hd:after, .layout:after { content: ""; display: table; clear: both } .Q-pList, .Q-pList ul, .Q-tList, .Q-tList ol, .Q-tList ul, .Q-tpList, .Q-tpList ul, .Q-tpWrap, .bd, .cf, .ft, .hd, .layout { *zoom: 1 } .chief, .fl, .layout .fl { float: left; display: inline } .extra, .fr, .layout .fr { float: right; display: inline } .fn { font-weight: 700 }3、360官网 CSS初始化 https://www.360.cn统一初始化td, body, th, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { padding: 0 } body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { margin: 0 } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400 } ul, ol { list-style: none }4、微博官网 CSS初始化 https://weibo.com统一初始化body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td { margin: 0; padding: 0; } table { border-collapse: collapse; border-spacing: 0; } fieldset, img { border: 0; } address, caption, cite, code, dfn, em, th, var, i { font-style: normal; font-weight: normal; } ol, ul { list-style: none; } caption, th { text-align: left; } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; }其他常用CSS样式q:before, q:after { content: ''; } a:focus { outline-style: none; } abbr, acronym { border: 0; font-variant: normal; } sup { vertical-align: text-top; } sub { vertical-align: text-bottom; } input, textarea, select { font-family: inherit; font-size: inherit; font-weight: inherit; *font-size: 100%; } textarea { resize: none } input::-ms-clear { display: none; } body { font: 12px/1.3 Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; overflow-x: hidden; color: #333; -webkit-font-smoothing: antialiased; } ::selection { background: #eb7350; color: #fff; } :focus { outline-color: #eb7350; } 5、淘宝官网 CSS初始化 https://www.taobao.com统一初始化blockquote, body, button, dd, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul { margin: 0; padding: 0 } body, button, input, select, textarea { font: 12px/1.5 tahoma, arial, 'Hiragino Sans GB', '\\5b8b\\4f53', sans-serif } h1, h2, h3, h4, h5, h6 { font-size: 100% } address, cite, dfn, em, var { font-style: normal } code, kbd, pre, samp { font-family: courier new, courier, monospace } small { font-size: 12px } ol, ul { list-style: none } a { text-decoration: none } a:hover { text-decoration: underline } sup { vertical-align: text-top } sub { vertical-align: text-bottom } legend { color: #000 } fieldset, img { border: 0 } button, input, select, textarea { font-size: 100% } table { border-collapse: collapse; border-spacing: 0 } button { border-radius: 0; }6、京东官网 CSS初始化 https://www.jd.com统一初始化 * { margin: 0; padding: 0 } em, i { font-style: normal } li { list-style: none } img { border: 0; vertical-align: middle } button { cursor: pointer } a { color: #666; text-decoration: none } a:hover { color: #e33333 } button, input { font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\5B8B\4F53, sans-serif } body { -webkit-font-smoothing: antialiased; background-color: #fff; font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, \\5B8B\4F53, sans-serif; color: #666 } 其他常用样式.hide, .none { display: none } .clearfix:after { visibility: hidden; clear: both; display: block; content: "."; height: 0 } .clearfix { *zoom: 1 }参考链接https://www.php.cn/faq/473405.htmlhttps://blog.csdn.net/heart_is_broken/article/details/126331482
2023年12月07日
11 阅读
0 评论
0 点赞
2023-12-07
css的4种引入方式--内联样式(标签内style)、内部样式表(<style>)、外部样式表(<link>、@import)
1.内联样式(Inline Styles):可以直接在HTML元素的style属性中定义CSS样式。例如:<p style="color: red; font-size: 16px;">这是一段红色的文本</p>内联样式适用于对单个元素应用特定的样式,但不适合用于整个网页或多个元素的样式定义。2.内部样式表(Internal Style Sheets):可以在HTML文档的标签中使用<style>标签定义CSS样式。例如:<head> <style> p { color: red; font-size: 16px; } </style> </head> <body> <p>这是一段红色的文本</p> </body>内部样式表适用于在单个HTML文档中定义样式,可以应用于多个元素。3.外部样式表(External Style Sheets):可以将CSS样式定义保存在一个独立的CSS文件中,并在HTML文档中通过<link>标签(链接式)或者@import指令(导入式)引入。通过<link>标签引入(最常用方式)例如:<head> <link rel="stylesheet" href="styles.css"> </head> <body> <p>这是一段红色的文本</p> </body>在这种方式下,CSS样式定义保存在名为styles.css的外部文件中,可以被多个HTML文档共享。这样做可以提高代码的可维护性和可重用性。通过@import指令引入@import指令是CSS语言的一部分,使用时把这个指令添加到HTML的一个<style>标签中;要与外部的CSS文件关联起来,得使用url而不是href,并且要把路径放在一个圆括号里面;<html> <head> <style type="text/css"> @import url(css/styles.css); </style> <!--此处的type属性是针对HTML4.01的,若在HTML5中则不需要加--> </head> <body> ...... </body> </html通过外部样式表,你可以在同一个CSS文件中定义多个样式规则,并将其应用于不同的HTML元素。以上是CSS的主要引入方式,开发人员可以根据具体需求选择适合的方式。通常情况下,推荐使用外部样式表,因为它提供了最好的可维护性和灵活性。两种方式的区别标签属于html标签,而@import是css提供的一种方式,标签不仅可以引入css,还可以做其他事,而@import只能引入css;加载顺序的区别:当一个页面被浏览时,link引入的css会被同步加载,而@import引用的css是等到其他元素全被下载完之后才被加载;兼容性的不同:@import是CSS2.1才提出的,所以只有在IE5以上才支持,低版本的浏览器不支持,而标签无此问题;当使用javascript控制DOM去改变样式时,只能使用标签,因为@import不是DOM可以控制的。参考链接https://zhuanlan.zhihu.com/p/658723834https://www.cnblogs.com/zhaoyingli/p/5379990.html
2023年12月07日
12 阅读
0 评论
0 点赞
2023-12-05
MySQL索引的种类
MySQL索引的种类索引的种类1、概述2、索引种类2.1、逻辑功能划分2.1.1、普通索引2.1.2、唯一索引2.1.3、主键索引2.1.4、全文索引2.2、物理实现上划分2.2.1、聚簇索引2.2.2、非聚簇索引2.2.3、聚簇索引与非聚簇索引区别2.3、作用字段个数划分2.3.1、单列索引2.3.2、组合索引3、总结1、概述大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。 今天要介绍的内容是索引的种类。 MySQL索引是一种提高查询效率的重要手段,它能够快速定位需要的数据,从而减少查询的开销。MySQL支持多种索引类型,每种类型都有其特点和适用场景。本文将介绍MySQL常见的索引类型及其特点。2、索引种类MySQL常见的索引种类有普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引等。索引可以从不同角度去划分,一般来说主要有以下三个划分角度:2.1、逻辑功能划分2.1.1、普通索引普通索引是 MySQL 中最基本的索引类型之一,它可以加快对表中数据的查询速度,并且它只是用于提高查询效率。下面是在user表中创建普通索引的例子: user表结构CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );可以为 “username” 和 “email” 列创建普通索引,以提高对这两列的查询速度。下面是创建普通索引的例子:ALTER TABLE users ADD INDEX idx_username (username); ALTER TABLE users ADD INDEX idx_email (email);这将为 “username” 和 “email” 列创建名为 “idx_username” 和 “idx_email” 的普通索引。创建普通索引后,我们可以在查询时使用这些索引来加快查询速度。例如:SELECT * FROM users WHERE username = 'john';2.1.2、唯一索引使用unique参数可以设置为唯一索引,创建唯一索引后,相应列的值在全表必须是唯一的,可以为空。 还有user表为例,可以为 user表的"username" 和 “email” 列创建唯一索引,以确保这两列中的每个值都是唯一的。下面是创建唯一索引的示例:ALTER TABLE users ADD UNIQUE INDEX idx_username (username); ALTER TABLE users ADD UNIQUE INDEX idx_email (email);这将为 “username” 和 “email” 列创建名为 “idx_username” 和 “idx_email” 的唯一索引。创建唯一索引后,如果尝试插入重复的值,则会引发错误,这可以帮助确保表中的数据是唯一的。2.1.3、主键索引主键索引是 MySQL 中的一种特殊的索引类型,它是用于标识每个表中唯一行的索引。主键索引要求主键列中的每个值都必须唯一且不能为空值。 还以user表为例,其表结构如下:CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );在这个例子中id列被指定为主键列,并且使用了auto_increment属性来自动为每个新行生产唯一的id值。因此,id列中的每个值都是唯一的,且不能为空值。通过将id列指定为主键列,MySQL将自动为该列创建主键索引。这将确保id类中的每个值都是唯一的,并且可以在查询时更快地定位和访问所需的数据。需要注意的是,每个表只能有一个主键,因此,在为表创建主键索引时,需要选择一个唯一的列作为主键列。2.1.4、全文索引全文索引是MySQL中的一种特殊索引类型,用于对文本字段进行全文搜索,全文索引可以帮助加快对文本数据的搜索速度,并支持全文搜索的高级功能,例如模糊搜索和关键词匹配。下面是一个创建全文索引的示例:CREATE TABLE articles ( id INT(11) NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );可以为 “content” 列创建全文索引,以便在文章内容中进行全文搜索。下面是创建全文索引的示例:ALTER TABLE articles ADD FULLTEXT INDEX idx_content (content) WITH PARSER ngram;注意,上面创建全文索引时我们指定了使用名为“ngram”的分词器来为content列创建全文索引。假设表内有如下的数据: 当我们使用两个关键字进行查询时,可以查询记录:mysql> select * from articles where match (content) against('不认'); +----+-------+------+-+ | id | title | content | created_at | +----+-------+------+-+ | 2 | 1 | 中文搜索,不认知 | 2023-07-14 14:49:24 | +----+-------+------+-+ 1 row in set (0.00 sec)但是如果使用的关键词只有一个字,则查不出任何记录:mysql> select * from articles where match (content) against('不'); Empty set (0.00 sec)这是因为MySQL中ngram_token_size变量的值默认为2,即要查询的词的最少个数为2,如果用一个词去查询自然查不到任何内容。如果要搜索单字,就要把ngram_token_size设置为1。在 MySQL 中,ngram_token_size 是一个全文索引配置选项,用于指定 ngram 索引中单个词语的长度。ngram 索引是一种全文索引算法,它将文本分成连续的 n 个字母或单词,以便更高效地进行搜索。ngram_token_size 决定了 ngram 索引中单个词语的长度,从而影响了全文索引的性能和搜索结果。 使用中文分词器时,需要确保MySQL的字符集设置与文本的字符集匹配,以确保正确的分词和搜索。此外,中文分词器的性能可能会受到一些限制,因此在使用中文分词器时,需要进行适当的性能测试。然而遗憾的是,在ElasticSearch等专门搜索引擎面前,关系型数据库的全文检索功能使用的并不多。2.2、物理实现上划分2.2.1、聚簇索引在 MySQL 中,聚簇索引是一种特殊的索引类型,它将表中的数据按照索引键的顺序存储在磁盘上,以提高数据访问的效率。聚簇索引的特点是,索引和数据存储在一起,因此在查询时可以直接访问数据而无需再次查找磁盘上的数据块。2.2.2、非聚簇索引非聚簇索引是一种索引类型,它将索引和数据分开存储在磁盘上。与聚簇索引不同,非聚簇索引将索引和数据存储在不同的位置,因此在查询时需要先访问索引,再根据索引中的指针访问磁盘上的数据块,从而增加了查询的开销。非聚簇索引常见的类型有 B-tree 索引、哈希索引和全文索引等。 B-tree 索引是一种常见的非聚簇索引类型,它将索引键和指向数据的指针存储在一棵平衡树中。B-tree 索引的特点是支持快速的范围查询和排序操作,因此常用于对范围较大的列进行索引,例如日期、价格等。 哈希索引是另一种常见的非聚簇索引类型,它将索引键通过哈希函数计算出一个唯一的哈希值,并将哈希值和指向数据的指针存储在哈希表中。哈希索引的特点是支持快速的等值查询,但不支持范围查询和排序操作。 全文索引是一种特殊的非聚簇索引类型,它可以对文本内容进行索引和搜索。全文索引的特点是支持对文本内容进行快速的关键字搜索和匹配,因此常用于搜索引擎和文本处理应用中。 需要注意的是,非聚簇索引通常需要占用更多的磁盘空间,因为需要存储索引和指向数据的指针。同时,非聚簇索引的查询效率可能会受到磁盘 I/O 速度的限制,因此需要仔细评估其适用性和性能,以选择最合适的索引类型。2.2.3、聚簇索引与非聚簇索引区别聚簇索引和非聚簇索引的区别主要有以下几个:聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。 聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,因此性能不如聚簇索引。 聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。2.3、作用字段个数划分2.3.1、单列索引单列索引是一种索引类型,它只包含一个列的值,如我们在上面创建的普通索引就是单列索引。2.3.2、组合索引组合索引是一种索引类型,它包含多个列的值。与单列索引不同,组合索引将多个列的值组合在一起作为索引键,以提高多列查询的效率。组合索引可以根据多个列的值来快速定位需要的数据,从而减少查询的开销。下面是一个组合索引的示例: 假设有一个名为 “users” 的表,表结构如下:CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT(11) NOT NULL, gender VARCHAR(10) NOT NULL, PRIMARY KEY (id), INDEX age_gender_index (age, gender) ) ENGINE=InnoDB;在这个表中,id 列是主键,因此自动创建了一个聚簇索引。同时,我们手动创建了一个名为 “age_gender_index” 的组合索引,以提高根据年龄和性别查询的效率。例如,查询年龄等于 30 且性别为男的用户记录:SELECT * FROM users WHERE age = 30 AND gender = 'male';MySQL 将使用 “age_gender_index” 索引来快速定位符合条件的用户记录,而无需扫描整个表。这样可以大大提高查询效率,尤其是在数据量较大时。需要注意的是,组合索引的顺序很重要,因为索引键的顺序影响查询效率。在上面的例子中,我们将 age 列放在前面,因为根据年龄查询的条件更加常见。此外,组合索引的列数也需要仔细考虑,过多的列可能会降低索引的效率。因此,需要仔细评估索引的适用性和性能,以选择最合适的索引类型和索引键的顺序。3、总结MySQL支持多种索引类型,每种类型都有其特点和适用场景。在使用索引时,需要根据查询的特点和数据的结构来选择合适的索引类型和索引键的顺序,以提高查询效率和减少查询的开销。ps:不够全面,这个详细些 MySQL 索引
2023年12月05日
8 阅读
0 评论
0 点赞
2023-12-05
MySQL查看和修改时区
为了验证 TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区 看了mysql 时区 时间网 世界时区MySQL查看和修改时区的方法查看当前时区1. 在MySQL客户端,可以通过如下命令查看当前时区:SELECT @@global.time_zone;2. 查看当前时区的设置,可以通过如下命令:SHOW VARIABLES LIKE '%time_zone%';输出内容包含了当前时区设置、可用的时区列表,以及系统时间和UTC时间之间的时差(即偏移量)。下面验证mysql的 TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区 默认mysql的时区是跟随系统时区显示,服务器是英国格林威治标准时间(GMT),改成中国时间东八区 ( UTC +8 ),看的出date2字段前后的时间变化跟时区有关。mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | GMT | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.00 sec) mysql> select date2 from new where id=1; +---------------------+ | date2 | +---------------------+ | 2023-12-05 16:06:51 | +---------------------+ 1 row in set (0.00 sec) mysql> set time_zone = '+08:00'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | GMT | | time_zone | +08:00 | +------------------+--------+ 2 rows in set (0.01 sec) mysql> select date2 from new where id=1; +---------------------+ | date2 | +---------------------+ | 2023-12-06 00:06:51 | +---------------------+ 1 row in set (0.00 sec) 修改时区1. 修改MySQL全局时区将MySQL服务的时区更改为UTC:SET GLOBAL time_zone = '+00:00';这里的'+00:00'代表UTC时间。2. 修改当前会话时区将当前会话的时区更改为本地时区:SET time_zone = 'Asia/Shanghai';这里'Asia/Shanghai'代表中国的时区。以上两种方法可以根据实际需求设置时区。示例说明:假设你需要在MySQL中使用同一个时区,这时可以通过修改全局时区实现:SET GLOBAL time_zone = '+08:00';如果你需要在MySQL中同时使用不同的时区,可以通过修改当前会话时区来实现:SET time_zone = 'America/New_York';这里'America/New_York'代表美国纽约的时区。
2023年12月05日
5 阅读
0 评论
0 点赞
1
...
51
52
53
...
157