‘数据库技术’ 分类的存档
1.enum(‘单选’,’多选’) 和 bool 插入 100000条记录都是,684.6k,查询所有记录的速度都是0.0004,是不是enum也是数字存储的。
记得以前找到过方法,而且可用,忘记了,重新google,发现网上提供的方法,有些问题: 一个简单的实现如下: SELECT * FROM `table` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`))) ORDER BY id LIMIT 1; 简化测试可以写为:select * from `table` where id>=(select rand()*(select max(id) from `table`)) limit 10 据我测试mysql5.1 如果table有20000条数据,基本没有可能获取到一条大于1000的数据,我也搞不清楚原因,难道是我的mysql版本问题?真是奇怪了。继续测试。 将limit 1 改为10后,结果发现,返回的数据依然不能超过1000,而且结果的id不连续,则说明mysql是逐条执行了where的rand,即执行了20000次,这是我的估计,毕竟我不是mysql专家,不知道如何研究。即便是这样,那么每条的几率依然应该是1/20000分之一的,为何结果却出乎意料? 换了一个mysql服务器,5.1.41,结果依然如此。 找到原来的写法了,很简单:order by rand() limit 10,,如果数据大可以用id in (select [...]
转自:http://hi.baidu.com/bbz_dd_a/blog/item/1c962bf4b69666dff2d38588.html 公司的oracle狂慢,估计是配置没搞好吧,自己也不会只能凑合用了,google发现如下好文章,收藏之 Oracle 表删除大量数据后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了,查询起来很慢。解决的方法是把该表所占用的表空间缩小,或者说释放表空间。 alter table XXXX move; 这样处理后就释放了表空间了。但是释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操作后必须重建索引。否则会 提示“ORA-01502: 索引’SMP.ITEMLOG_MID_IDX’或这类索引的分区处于不可用状态” 而重建索引的方法当然可以先drop掉再create ,但是这样太麻烦了,用alter index XXX rebuild 这样最快了,不会改变原来的索引结构。
转载:作者: ddvip, 出处:IT专家网论坛 http://database.ctocio.com.cn/227/8902727.shtml 本文主要介绍mysql数据库下show命令的主要用法: a. show tables或show tables from database_name; — 显示当前数据库中所有表的名称。 b. show databases; — 显示mysql中所有数据库的名称。 c. show columns from table_name from database_name; 或show columns from database_name.table_name; — 显示表中列名称。 d. show grants for user_name; — 显示一个用户的权限,显示结果类似于grant 命令。 e. show index from table_name; — 显示表的索引。 f. show status; — 显示一些系统特定资源的信息,例如,正在运行的线程数量。 g. show variables; [...]
Sql客户端中,虽然最便捷的是万能而且轻量无比的Sql Workbench,唯一的遗憾是只支持JDK5,不过这个小小的遗憾只要配置配置就能避免。 Otherwise,Oracle来说,用起来最爽的应该还是pl/sql Developer。只是开发机器上懒得装肥硕的Oracle,即使是客户端也是笨重无比。 所幸发现了一个Windows下免安装Oracle客户端就能使用pl/sql developer轻便的方法,分享: 1.从http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html中 Download Instant Client,注意2个basic包下一个即可,不推荐basiclife 2,在磁盘创建上目录,解压过去,最终解压文件会在同一个目录下。比如解压到c:\oracleclient 3,创建目录c:\oracleclient\network\admin 4,创建文件tnsnames.ora 内容如下 oracledata = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yourhostIp )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = yourSID ) ) ) 5,设置pl/sql Developer的perference,主要填二个文本框 OCI Library:“c:\oracleclient\oci.dll”, Oracle_home: “c:\oracleclient\” 6,重启pl/sql developer, 输入用户名密码,以及tnsnames.ora设置的oracledata, Enjoy it.
ALTER 语句修改数据表 1.修改数据表名 ALTER TABLE [方案名.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME; 2.修改列名 ALTER TABLE [方案名.]TABLE_NAME RENAME COLUMN OLD_COLUMN_NAME TO NEW_COLUMN_NAME; 3.修改列的数据类型 ALTER TABLE [方案名.]TABLE_NAME MODIFY COLUMN_NAME NEW_DATATYPE; 4.插入列 ALTER TABLE [方案名.]TABLE_NAME ADD COLUMN_NAME DATATYPE; 5.删除列 ALTER TABLE [方案名.]TABLE_NAME DROP COLUMN COLUMN_NAME;
在SQL Server,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。 /**//* 1. exec sp_spaceused ‘表名’ (SQL统计数据,大量事务操作后可能不准) 2. exec sp_spaceused ‘表名’, true (更新表的空间大小,准确的表空大小,但可能会花些统计时间) 3. exec sp_spaceused (数据库大小查询) 4. exec sp_MSforeachtable “exec sp_spaceused ‘?’” (所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准) 5. exec sp_MSforeachtable “exec sp_spaceused ‘?’,true” (所有用户表空间表小,大数据库慎用) */create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20)) exec sp_MSforeachtable “insert into #t exec sp_spaceused ‘?’” select [...]
一、从命令行里进入数据库 依次打开“开始”—>“运行”,在运行对话框里输入cmd,打开“命令提示符”窗口, 在“>”后面输入下面兰色的语句。 C:\Documents and Settings\hhy> isql -Usa -Shrms -Jcp936 Password: 注意:-U 后为登陆数据库使用的用户名 -S 后为所登陆数据库服务的名称 -J 后为所登陆数据库使用的字符集 二、列出现有数据库极其大小 将数据库服务器里的全部的数据库列表出来,使用下面语句。 1> sp_helpdb 2> go name db_size owner dbid created status ———————— ————- ———————— —— —————— ———————————————————————- ——————————- hrms 1100.0 MB sa 4 May 13, 2006 no options set master 48.0 MB sa 1 May 13, 2006 [...]
