❶ 怎么从数据库中的一亿条数据中读取我想要的十条数据
写查询的sql语句,要在查询关键字上建立索引,这样可以加快速度。
例如:select 字段1,字段2,... from 表 where 条件1= aa and 条件2 = bb
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5、下面的查询也将导致全表扫描:(不能前置百分号)
select id from t where name like ‘�c%’
若要提高效率,可以考虑全文检索。
6、in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
7、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
8、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
9、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=’abc’–name以abc开头的id
select id from t where datediff(day,createdate,’2005-11-30′)=0–’2005-11-30′生成的id
应改为:
select id from t where name like ‘abc%’
select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′
10、不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
❷ 1亿条数据如何分表100张到Mysql数据库中(PHP)
下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码。
当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1亿条数据,分100张表。具体实现过程如下:
首先创建100张表:
$i=0;
while($i<=99){
echo
"$newNumber
\r\n";
$sql="CREATE
TABLE
`code_".$i."`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
PRIMARY
KEY
(`full_code`),
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8";
mysql_query($sql);
$i++;
下面说一下我的分表规则,full_code作为主键,我们对full_code做hash
函数如下:
$table_name=get_hash_table('code',$full_code);
function
get_hash_table($table,$code,$s=100){
$hash
=
sprintf("%u",
crc32($code));
echo
$hash;
$hash1
=
intval(fmod($hash,
$s));
return
$table."_".$hash1;
}
这样插入数据前通过get_hash_table获取数据存放的表名。
最后我们使用merge存储引擎来实现一张完整的code表
CREATE
TABLE
IF
NOT
EXISTS
`code`
(
`full_code`
char(10)
NOT
NULL,
`create_time`
int(10)
unsigned
NOT
NULL,
INDEX(full_code)
)
TYPE=MERGE
UNION=(code_0,code_1,code_2.......)
INSERT_METHOD=LAST
;
这样我们通过select
*
from
code就可以得到所有的full_code数据了。
以上介绍就是本文的全部内容,希望对大家有所帮助。
❸ 如何导出数据库文件
问题一:如何将数据库导出成sql文件 您好,很高兴为您解答。
1、打开SQL Server Management Studio 2008 ,连接到数据库服务器,展开对象资源管理器到数据库节点
2、选择需要将数据导出到脚本的数据库,将包含所有的存储过程,表,视图,表里的数据等等。
3、右击选中的数据,按照以下路径选择生成脚本向导 :AdventureWorks -〉任务 -〉生成脚本
4、当点击生成脚本,弹出一个向导--生成数据库对象脚本。
5、下一步到达设置脚本编写选项,进入高级设置对话框,关键是要编写脚本的数据类型这里,默认是仅限架构,选择架构和数据或者是数据都可以吧数据导成脚本
执行完就可以看到结果了
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
问题二:如何导出mysql数据库到sql文件 可以使用mysqlmp
如下几种操作:
1、导出整个数据库(包括数据)
mysqlmp -u username -p dbname > dbname.sql
2、导出数据库结构(只有建表语句,不含数据)
mysqlmp -u username -p -d dbname > dbname.sql
3、导出数据库中的某张数据表(包含数据)
mysqlmp -u username -p dbname tablename > tablename.sql
4、导出数据库中的某张数据表的表结构(只有建表语句,不含数据)
mysqlmp -u username -p -d dbname tablename > tablename.sql
还有负责的用法,可以查看mysqlmp的参数
问题三:Oracle数据库如何导出?? 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\chu.dmp中
exp [email protected] file=d:\chu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp [email protected] file=d:\chu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
触xp [email protected] file=d:\chu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以00打头的数据导出
exp [email protected] file=d:\chu.dmp tables=(table1) query=\ where filed1 like '00%'\
上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
不过在上面命令后面 加上 press=y 就可以了
问题四:如何批量导出MYSQL数据库成.sql文件 DOS 执行,改成你的mysql路径和要导出的数据库名字
set path=C:\Program Files (x86)\MySQL\MySQL Server 5.0穿bin
mysqlmp -u root -ppassword --default-character-set=utf8 数据库名>数据库名.sql
这个真不知道,不过一般的MySQL里面好坦虚像没有这么多数据库,如果是几个或者十几个,那么就直接复制后面的一句,改数据库名字就可以了
问题五:.db后缀名的数据库文件如何打开并导出数据 比如Access数据库(扩展名为mdb)、xBase类数据库(扩展名为dbf),但有两种扩展名同为db的数据库,分属两个公司的产品,一个是老牌桌面数工库Paradox,这是Borland公司的产品,其广泛使用的时代是在Dos时期,但现在仍让丛燃有用Delphi、C++Builder等工具开发的产品使用这一类型的数据库,Microsoft的桌面数据引擎JET对其支持也比较完整;
另一个是Sybase的ASA数据库,全称叫做郑大Adaptive Server Anywhere,这个数据库以前被称作Sql Anywhere,这个数据库不仅可以用在桌面级,还可以用于服务器级,因为其支持存储过程、触发器等,一般在使用PowerBuilder开发的产品中很常见,因为毕竟是同一个公司的产品,这两个数据库都可以通过Ado来访问.
问题六:在phpmyadmin中怎么导出数据库 选择下方另存为文件,然后根据提示导出就可以了
问题七:怎样将从网站后台的数据库中导出数据? ''利用ASP生成EXECL文档
'=================================================
set conn=server.createobject(adodb.connection)
conn.open application(connstring)
set rs=server.createobject(Adodb.recordset)
sql=select * from xxloginteachers order by jsid desc
rs.open sql,conn
do whil订 not rs.eof
msg=msg & rs(jsid) & chr(9) & rs(jsxm) & vbcrlf
rs.movenext
loop
set f=server.createobject(scripting.filesystemobject)
set myfile=f.createtextfile(d:\xmllover.xls,true)
myfile.close
'已生成xmllover.xls!!!!
问题八:从oracle数据库里想导出单个表,怎么导出呀 exp [email protected] file=d:\c罚u.dmp tables=(table1) system是用户名,manager 是密码,myoracle 是数据库名。
问题九:.mdf数据库文件如何导入数据库 打开企业管理器->向下展开到&哗39;数据库'->右键点击'数据库'->选择'所有任务'->点击'附加数据库'->点击 带三个点的按钮(...)->找到要附加的数据库(要选择后缀名.mdf的)->点击确定->点击确定 附加成功
问题十:sql server2005数据库文件怎么导入 方法/步骤
1、点击左下角 开始按钮,找到sql server2005,打开它
2、右击数据库,选择新建数据库,如果已经有了数据库,则可以点击附加数据库,将本地的数据库文件附加到sql里面
3、附加完成后,我们点击数据库,展开,找到我们附加上的test数据库,再点开test数据库下的表文件夹,发现里面有已经创建好的表
4、右击,打开表,则可以增加表或修改的内容
5、右击修改表,怎可以增加或修改表的属性
6、也可通过右击表文件夹,选择新建表来新建一直表,或者点击左上角的新建查询通过命令来新建一张表