mysql数据库

mysql优化Analyze Table

核能气质少年 提交于 2020-02-29 17:13:25
http://blog.csdn.net/alongken2005/article/details/6394016 Analyze Table MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列包含多少个不同的值——如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了。 我们可以使用SHOW INDEX语句来查看索引的散列程度: SHOW INDEX FROM PLAYERS; TABLE KEY_NAME COLUMN_NAME CARDINALITY ------- -------- ----------- ----------- PLAYERS PRIMARY PLAYERNO 14 因为此时PLAYER表中不同的PLAYERNO数量远远多于14,索引基本失效。 下面我们通过Analyze Table语句来修复索引: ANALYZE TABLE PLAYERS; SHOW INDEX FROM PLAYERS; 结果是: TABLE KEY_NAME COLUMN_NAME CARDINALITY ------- -------- ----------- ----------- PLAYERS PRIMARY PLAYERNO

Ruby连接MySQL数据库要注意的地方

ε祈祈猫儿з 提交于 2020-02-29 15:47:43
1、确保mysql驱动都已经安装好。 安装mysql驱动 gem install mysql 安装mysql2驱动 gem install mysql2 2、libmysql.dll 文件是MySQL的动态链接库文件,缺少此文件数据库无法正常工作。将这个文件 拷贝到 Ruby/Bin目录中,或者C:\windows\system32目录也可。 libmysql.dll 下载地址: http://www.mysql.com/downloads/connector/c/ Ruby连接使用mysql数据库例子 使用mysql 驱动 1 2 3 4 5 6 require "mysql" dbc = Mysql.real_connect( '主机IP地址' , '账户名' , '密码' , '数据库名字' ) res = dbc.query( 'select * from 你的数据表' ) while row = res.fetch_row do puts "#{row[0]},#{row[1]}" end 使用mysql2 驱动 1 2 3 4 5 6 require 'mysql2' client = Mysql2::Client. new ( :host => "主机IP地址" , :username => "账户名" , :password => "密码" , :database

又是周六了-MySQL特训

不羁岁月 提交于 2020-02-29 15:34:11
  hi 又是周六,又是磨蹭个一上午~午饭后开始吧 1、MySQL -----子查询与连接(三)----- ----使用INSERT...SELECT插入记录 --数据库内容的英文版本 由于我的WAMP中的MYSQL控制台显示中文无力,在更改过程中心力交瘁,遂改变战术,把数据改为了全英文的,现分享出来 -- 创建数据表 CREATE TABLE IF NOT EXISTS goods( goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, goods_name VARCHAR(150) NOT NULL, goods_cate VARCHAR(40) NOT NULL, brand_name VARCHAR(40) NOT NULL, goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0, is_show BOOLEAN NOT NULL DEFAULT 1, is_saleoff BOOLEAN NOT NULL DEFAULT 0 ); -- 写入记录 INSERT goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('R510VC 15.6Inches

MySQL之SQL演练(四)

此生再无相见时 提交于 2020-02-29 15:21:00
一:准备数据 1.创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 use jing_dong; -- 创建一个商品goods数据表 create table goods( id int unsigned primary key auto_increment not null, name varchar(150) not null, cate_name varchar(40) not null, brand_name varchar(40) not null, price decimal(10,3) not null default 0, is_show bit not null default 1, is_saleoff bit not null default 0 )default charset=utf8; 2.插入数据 -- 向goods表中插入数据 insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);

PHP无限极分类

て烟熏妆下的殇ゞ 提交于 2020-02-29 15:15:47
数据库代码: mysql> desc category; +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | pid | int(11) | NO | | NULL | | | catename | varchar(20) | NO | | NULL | | | createtime | varchar(10) | NO | | NULL | | +------------+-------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) mysql> select * from category; +----+-----+--------------+------------+ | id | pid | catename | createtime | +----+--

高并发写入mysql的设计

筅森魡賤 提交于 2020-02-29 13:39:36
最近开发一个项目。客户端每隔10秒提交100行数据给服务端,服务端查重后写入。 客户端约在几万左右,提交数据比较集中,不考虑读数据的问题。 现在的设计是: 数据库按客户端进行分表。每个表的数据量不高。 服务端获得数据后,先插入redis队列,然后在通过定时任务插入数据库。 问题是: 1、服务端提供给客户端的接口,是否能满足几千上万的客户端同时post数据(客户端是10秒提交一次)? 2、将数据首先保存在redis队列中,如果有几十上百万的数据,redis是否稳定? 基本目标是保证服务端能正常提供服务。 ---------------------- 补充内容 ------------------------------- 项目主要是采集用户的数据。开机就会自动运行。 每次提交100条,10秒提交一次,一般用户每天在10次以内,也就是1000条数据以内。 每条数据包含五六个值对,在100字符以内。 需要保证每天数据的完整性。会出现多个客户端采集同一用户数据的情况,所以需要避免重复。 现在考虑是这样的: 数据表按用户分表。 用户提交的数据按用户先保存在redis队列中,即每个用户每天一个队列,保存到数据库后,删除该队列。 解决办法:https://segmentfault.com/q/1010000005931313 来源: oschina 链接: https://my.oschina

MySQL AHI 实现解析

瘦欲@ 提交于 2020-02-29 13:00:08
版权声明:本文由 musazhang 原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/904925001482373849 来源:腾云阁 https://www.qcloud.com/community 前言     MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上;如果树高为 N, 则需要读取索引树上的 N 个结点并进行比较,如果 buffer_pool 较小,则大量的操作都会在 pread 上,用户响应时间变长;另外,MySQL中 Server 层与 Engine 之间的是以 row 为单位进行交互的,engine 将记录返回给 server 层,server 层对 engine 的行数据进行相应的计算,然后缓存或发送至客户端,为了减少交互过程所需要的时间,MySQL 做了两个优化: 如果同一个查询语句连续取出了 MYSQL_FETCH_CACHE_THRESHOLD(4) 条记录,则会调用函数 row_sel_enqueue_cache_row_for_mysql 将 MYSQL_FETCH_CACHE_SIZE(8) 记录缓存至 prebuilt->fetch

mysql —— 分表分区

拜拜、爱过 提交于 2020-02-29 11:24:31
面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量数据的优化有两种方法: 1、大表拆小表的方式(主要有分表和分区两者技术) (1)分表技术 垂直分割 优势:降低高并发情况下,对于表的锁定。 不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大。 水平分割 如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N多页,并通过一个新的表(总表),记录着每个页的的位置。假如一 个门户网站,它的数据库表已经达到了1000万条记录,那么此时如果通过select去查询,必定会效率低下(不做索引的前提下)。为了降低单表的读写 IO压力,通过水平分割,将这个表分成10个页,同时生成一个总表,记录各个页的信息,那么假如我查询一条id=100的记录,它不再需要全表扫描,而是 通过总表找到该记录在哪个对应的页上,然后再去相应的页做检索,这样就降低了IO压力。 水平分表技术就是将一个表拆成多个表,比较常见的方式就是将表中的记录按照某种HASH算法进行拆分,同时,这种分区方法也必须对前端的应用程序中的 SQL进行修改方能使用,而且对于一个SQL语句,可能会修改两个表,那么你必须要修改两个SQL语句来完成你这个逻辑的事务

storm 与mysql整合问题

浪子不回头ぞ 提交于 2020-02-29 10:36:32
首先说明下问题的情况, 1、我storm 环境已经搭建完成,在本地测试wordcount是没问题的, 2、我在wordcount中加入一个MysqlBolt,此Bolt只是简单的把 wordcount的结果存入mysql数据库中,在本地模式测试测试时,完全可以把结果插入指定表。 3、我的每个storm 节点都已经把mysql-connector-java-5.1.23.jar 放到storm的lib目录下。 4、每个节点均可以访问指定数据库,都已经开通相应权限 5、并且在远程模式下执行原始wordcount是没问题的 OK !!! 问题是,在远程模式下运行整合mysql的wordcount时 就出错误了,异常为空指针,通过查找代码,发现在获得mysql 连接 时异常。 代码如下:标红处报异常 String host_port = "slaver1:3306"; String database = "test"; String username = "root"; String password = "hello"; String url = "jdbc:mysql://" + host_port + "/" + database; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn =

mysql数据库的读写分离

好久不见. 提交于 2020-02-29 10:01:59
一、首先读写分离呢 一般的结构(1主(master) 2从(slave)) 数据库的读写分离结构 读写分离的原理:就是主服务器每当新增数据或者删除数据,都会有二进制日志去记录这些操作,然后从数据库就根据日志来自动执行相同的动作,这样就达到从数据会自动同步主数据库的数据。 二、读写分离配置(1主2从)---说明:我是先做好,后面才补上博客的 1、首先,先去服务里面停止掉mysql57(3306端口)(在服务上右键停止就可以了).mysql3307 mysql3308暂时忽略(后面讲到) 服务列表 2.接下来找到你的mysql57(3306端口)安装目录 例图 我自己的安装目录 mysql的安装目录 3.将上面的文件夹复制2份到其它地方去,改名后面加上 3307 3308(命名只是为了区分) 复制2份到其它地方 4、接下来进入到3307的文件夹,将my-default.ini这个文件 重命名为my.ini 重命名为my.ini 5、接下来我们要在当前文件夹新增data文件夹,进行任何操作最好先停止掉mysql的服务 新增data文件夹 6、然后我们去找到mysql57(3306端口)的data文件,将里面的东西可以全部拷贝到3307 data文件夹里面去 3306端口的数据库 三、开始文件里面的配置 1、首先我们找到mysql57(3306端口)的文件配置 3306端口的my