‘壹’ 一个复杂查询,我是用一个复杂sql完成,还是分成多个小sql完成好,原因
如果很复杂,那就用存储过程;每次运行sql,数据库都要解析该sql,存储过程就省去了这个解析的步骤;如果sql很复杂,那么在存储过程内拼sql字符串也是挺折磨人的...
至于是不是分成多个小sql,如果你已经把那个复杂sql写出来了,我想就没必要分开写了.我都是复杂sql搞不定被逼无奈才分开写的o(╯□╰)o
‘贰’ 如何将一个大的SQL数据文件拆分成多个文件进行保存
点右键 然后点击压缩文件 就可以压缩到 指定的地方
‘叁’ 如何将sql数据库文件分割
利用软件:“SQLDumpSplitter.exe”
将导出的数据备份文件切割,可以自定义每个文件的大小,这个软件有一个好处是不会把每条记录分开,保证了每条记录的完整性,但是如果一个表中插入的数据较多,那么会把插入操作分成好几个,放在不同的小文件当中。
所以如果导入过程当中遇到 data node 参数需要改动的问题时,首先得删除表记录,再重新导,不免会出现重复记录的情况。
SQLDumpSplitter在切割数据文件的同时会把数据库表结构也独立保存起来,方便进行数据库初始化操作。
‘肆’ 怎么把这样长的sql语句拆分为单条sql语句,这种语句是通过工具生成的还是手动拼出来的
SELECTu.userid,u.name,u.phone
fromhx_useru
LEFTJOIN(SELECT*
fromhx_userrest
WHEREuserrestdate='".$orderhead['serverdate']."')r
onu.userid!=r.userid
INNERJOIN(SELECTuserid
from(SELECTuserid,GROUP_CONCAT(infovaluename)user_info
fromhx_userattrGROUPBYuserid)a
INNERJOIN(SELECTGROUP_CONCAT('%',infovaluename,'%')order_info
fromhx_orderneedinfo
whereorderheadid=$orderheadidandinfokeyperson=2)b
ona.user_infoLIKEIFNULL(b.order_info,'%'))d
onu.userid=d.userid
INNERJOIN(SELECT*
fromhx_userproctclass
WHEREproctclassid=".$orderhead['proctclassid'].")f
onf.userid=u.userid
LEFTJOINhx_sendareasa
onu.userid=sa.userid
WHEREu.useridNOTin(SELECTou.userid
fromhx_servertimes1
INNERJOIN(SELECT*
fromhx_servertime
whereservertimevalue='".$orderhead['servertime']."')s2
ON(s1.ordernum=s2.ordernum-1)or(s1.ordernum=s2.ordernum+1)
INNERJOIN(SELECT*
fromhx_orderhead
whereserverdate='".$orderhead['serverdate']."')h
onh.servertime=s1.servertimevalue
INNERJOINhx_order_userou
onou.orderheadid=h.orderheadid)
ANDusertype=1
ORDERBYabs(fun_getdistance(".$orderhead['latitude'].",".$orderhead['longitude'].",sa.latitude,sa.longitude))ASC,levelDESClimit$limitStart,$pagesize
稍微整理了一下,拆分是不好拆分的,这段语句都是用的子查询和连接查询,操作的表比较多,至于你说的手动拼还是用工具这个就不清楚了
‘伍’ php框架中多表查询sql语句时拆分查询好还是一次性的好
个人建议还是拆分的比较好,一次查询虽然写法上可能会省代码,但是效率就很低下,因为即使加了索引,而在你联合查询 的时候语句写的不当就会导致索引不生效,从而效率就会下降。相反拆分或者单表操作,虽然写起来看着繁琐,但是逻辑清晰,而且效率会提高。不过也要看情况,如果索引设计的好,一条语句出来也不是不可以的
‘陆’ 关于sql字段拆分的问题
先增加“收方”、“付方”两个字段,然后用update语句进行更新,如:
update tab set 收方='收方' where 收付类型='收'
至于更新的规则,你要按照自己的业务去做,你没有描述,我不知道怎么回答。
‘柒’ sql语句 拆分
select 这个地方就是查询的字段,然后IP是自定义的名字 'IP'=substring(拆分的字段名,b.number,charindex('拆分的符号',拆分的字段名+',',b.number)-b.number) from 你的表名 a
inner join master.dbo.spt_values b on b.number between 1 and len(拆分的字段名)
and substring(','+拆分的字段名,b.number,1)='拆分的符号'
where b.type='P' 后边可以是条件 and Id=1
‘捌’ sql 拆分字段问题
标注:网上大神写的
SELECT
substring(JGZID,patindex('%[^0-9][0-9]%',JGZID)+1,patindex('%[0-9][^0-9]%',JGZID)-patindex('%[^0-9][0-9]%',JGZID))AS JGZBH FROM dbo.Table_1
你试试
‘玖’ mysql用分库分表后还需要写复杂的SQL语句吗
肯定需要啊,分库分表是把大表拆分成小表,但是表之间的关联变多了。
‘拾’ php数据库用一个sql取数据还是多个sql分开取数据好
php使用的数据库一般是mysql,当数据量大于1000万时,为了效率最好还会进行分表存储。
这要看你应用在什么场合了,如果只是单纯的数据处理,不需要取出来使用的话,可以直接在数据库里操作,比如建十张表,根据特征把1000万条数据插入到不同的表里。如insert into table_1 select * from table。
如果要取出来使用的话,建议写执行脚本,在数据库空闲时(如零点之后)执行该脚本,将处理的结果保存在另外一张表里,再从这张表里获取想要的结果。