同服务器的话采用 库名.表名就可以跨库操作
创新互联建站专注于网站建设,为客户提供网站设计、成都网站制作、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,高端网站设计,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。
例如数据库schema1(含有表A)和schema2(含有表B)
在schema2中想访问schema1的A表,直接select * from schema1.A
如果是mysql里面两个不同的数据库,应该是可以直接使用 [数据库名称].[表名]来关联的。TP指定的数据库,是因为他要缓存这个数据库的表字段等。试试看行不行,测试通过: SELECT a.*,b.* FROM table1 a LEFT JOIN db2.table2 b ON a.id=b.id
CSDN官方APP
中国专业的IT社区立即下载
CSDN首页
博客
学院
下载
GitChat
论坛
APP
问答
商城
VIP
活动
招聘
ITeye
TinyMind
专题
Copyright © 1999-2019,
CSDN.NET, All Rights Reserved
crimeheaven的专栏
登录
crimeheaven关注 访问量 6万+ 原创 22 博主更多文章
转 mysql跨库操作速度慢的解决方案
crimeheaven阅读数:24752014-03-14
远程连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。
但是,这样会引起一个问题:连接mysql时,不能使用 localhost连接了,而是要使用IP地址的;如果是按localhost对用户赋权限的话,用户登录权限也要修改一下的。
连接mysql速度慢的解决方法.
2台服务器,一台跑iis+php,一台跑mysql,和以往一样配置好环境,测试页面一切OK
跑应用的时候发现php访问mysql速度很慢,这种情况在以前从未发现过,虽然2台服务器并非在同一网段中,但是ping数值基本上都在1,2ms之间,tcp连接应该不是问题关健,google以后找到答案,在my.ini文件的[mysqld]部分加入:skip-name-resolve,保存文件,重启mysql,一切OK啦,速度象飞一样了
新版本的mysql配置起来不象以前的那个傻瓜化了,这个问题折腾了我一上午的时间,晚上回来总算是解决了,嘿嘿,又学到一些东西。
Windows 2003下的MySQL 5服务器,本机连接到MySQL服务非常快,局域网内有两台Linux机器,有一台连接很快,另外一台输入密码后要等好几秒钟才能连上。
最简单的办法就是用个ACCESS,无论你用什么代码来写,或者直接操作SQL,
如果是直接操作SQL那更简单,他可以直接建立操作查询,两个地方的数据库也可以用OpenRowSet关键词来取得联系。如果是用代码来编译程序做这样的操作,我的建议是用如PetShop和直接用个ACCESS来做跨数据库的数据表操作。
ACCESS直接做远程网络连接表(SQL远程数据库可以是任意地方的,只样能与当前主机能PING上)在ACCESS里做查询语句,或者直接做一个更新查询,代码调用的时候直接查询更新查询就达到了你的目的。如果是不借助ACCESS或者是借助ACCESS要用纯代码也有办法:
一个是用ACCESS的ODBC()库功能他的表结构是:
Select * from 表名 IN ODBC[ODBC:Driver={SQL Server};Server=服务器IP地址;UID=数据库用户名;PWD=密码;DataBase=数据库名称]
你把上面的查询当成一个表,把要插入的表和目的表用上面的格式写下来,拼接字符串就达到了目的。
OpenROWSET是SQL官方提供的一种办法,两个异地数据库,可以用OPENROWSET关键字来做连接,网上代码多的是。
PETSHOP是.Net提供的一种方法,直接用.NET连接数据库,用PETSHOP象ACCESS查询视图一样做查询表,但是我觉得这样做不好,程序运行效率低,而且相当不灵活。
一个表更新到另一个表要做更新检查,一边插入查询以便做连接查询匹配没有的数据才可以查询,重复的不允许插入,代码这么写:
INSERT INTO 目的表 SELECT 字段名称, 字段名称1, ... FROM 处理表 INNER JOIN 目的表 ON 处理表.匹配字段=目的表.匹配字段 WHERE ((目的表.字段) IS NULL)
把筛选好的表插入你的目的表,数据库问题解决了,插入检查还要解决啊,你琢磨一下。
1、需要当前用户对两个库具备相应的访问和操作权限
2、通过数据库名.表名的方式进行join
SELECT
*
FROM
db1.t1 a
INNER JOIN db2.t2 b ON a.id = b.id
WHERE
a.Id = 1;
3、建议改为es方式进行数据处理,想学java欢迎关注。
这种架构一般用在以下三类场景
1. 备份多台 Server 的数据到一台如果按照数据切分方向来讲,那就是垂直切分。比如图 2,业务 A、B、C、D 是之前拆分好的业务,现在需要把这些拆分好的业务汇总起来备份,那这种需求也很适用于多源复制架构。实现方法我大概描述下:业务 A、B、C、D 分别位于 4 台 Server,每台 Server 分别有一个数据库来隔离前端的业务数据,那这样,在从库就能把四台业务的数据全部汇总起来,而不需要做额外的操作。那没有多源复制之前,要实现这类需求,只能在汇总机器上搭建多个 MySQL 实例,那这样势必会涉及到跨库关联的问题,不但性能急剧下降,管理多个实例也没有单台来的容易。
2. 用来聚合前端多个 Server 的分片数据。
同样,按照数据切分方向来讲,属于水平切分。比如图 3,按照年份拆分好的数据,要做一个汇总数据展现,那这种架构也非常合适。实现方法稍微复杂些:比如所有 Server 共享同一数据库和表,一般为了开发极端透明,前端配置有分库分表的中间件,比如爱可生的 DBLE。
3. 汇总并合并多个 Server 的数据
第三类和第一种场景类似。不一样的是不仅仅是数据需要汇总到目标端,还得合并这些数据,这就比第一种来的相对复杂些。比如图 4,那这样的需求,是不是也适合多源复制呢?答案是 YES。那具体怎么做呢?