热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL性能优化,开发注意事项

对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。应尽量避免在where子句中对字段进行null值判断&#x
  1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

  2. 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。

  3. 应尽量避免在 where 子句中使用!&#61;或<>操作符&#xff0c; MySQL只有对以下操作符才使用索引&#xff1a;<&#xff0c;<&#61;&#xff0c;&#61;&#xff0c;>&#xff0c;>&#61;&#xff0c;BETWEEN&#xff0c;IN&#xff0c;以及某些时候的LIKE。

关于 MySQL 相关的文章和教程发布了很多&#xff0c;关注微信公众号 Java后端&#xff0c;回复 666 下载就行了。

  1. 应尽量避免在 where 子句中使用 or 来连接条件&#xff0c; 否则将导致引擎放弃使用索引而进行全表扫描&#xff0c; 可以 使用UNION合并查询&#xff1a;

select id from t where num&#61;10 union all select id from t where num&#61;20

  1. in 和 not in 也要慎用&#xff0c;否则会导致全表扫描&#xff0c;对于连续的数值&#xff0c;能用 between 就不要用 in 了&#xff1a;

Select id from t where num between 1 and 3

  1. 下面的查询也将导致全表扫描&#xff1a;

select id from t where name like ‘%abc%’
或者

select id from t where name like ‘%abc’
若要提高效率&#xff0c;可以考虑全文检索。而 select id from t where name like ‘abc%’ 才用到索引

  1. 如果在 where 子句中使用参数&#xff0c;也会导致全表扫描。

  2. 应尽量避免在 where 子句中对字段进行表达式操作&#xff0c;应尽量避免在where子句中对字段进行函数操作

  3. 很多时候用 exists 代替 in 是一个好的选择&#xff1a;select num from a where num in(select num from b).用下面的语句替换&#xff1a;select num from a where exists(select 1 from b where num&#61;a.num)

  4. 索引固然可以提高相应的 select 的效率&#xff0c;但同时也降低了 insert 及 update 的效率&#xff0c;因为 insert 或 update 时有可能会重建索引&#xff0c;所以怎样建索引需要慎重考虑&#xff0c;视具体情况而定。一个表的索引数最好不要超过6个&#xff0c;若太多则应考虑一些不常使用到的列上建的索引是否有必要。

  5. 应尽可能的避免更新 clustered 索引数据列&#xff0c; 因为 clustered 索引数据列的顺序就是表记录的物理存储顺序&#xff0c;一旦该列值改变将导致整个表记录的顺序的调整&#xff0c;会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列&#xff0c;那么需要考虑是否应将该索引建为 clustered 索引。

  6. 尽量使用数字型字段&#xff0c;若只含数值信息的字段尽量不要设计为字符型&#xff0c;这会降低查询和连接的性能&#xff0c;并会增加存储开销。

  7. 尽可能的使用 varchar/nvarchar 代替 char/nchar &#xff0c; 因为首先变长字段存储空间小&#xff0c;可以节省存储空间&#xff0c;其次对于查询来说&#xff0c;在一个相对较小的字段内搜索效率显然要高些。

  8. 最好不要使用”“返回所有&#xff1a;select from t &#xff0c;用具体的字段列表代替“*”&#xff0c;不要返回用不到的任何字段。

  9. 尽量避免向客户端返回大数据量&#xff0c;若数据量过大&#xff0c;应该考虑相应需求是否合理。

  10. 使用表的别名(Alias)&#xff1a;当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。

  11. 使用“临时表”暂存中间结果

简化SQL语句的重要方法就是采用临时表暂存中间结果&#xff0c;但是&#xff0c;临时表的好处远远不止这些&#xff0c;将临时结果暂存在临时表&#xff0c;后面的查询就在tempdb中了&#xff0c;这可以避免程序中多次扫描主表&#xff0c;也大大减少了程序执行中“共享锁”阻塞“更新锁”&#xff0c;减少了阻塞&#xff0c;提高了并发性能。

  1. 一些SQL查询语句应加上nolock&#xff0c;读、写是会相互阻塞的&#xff0c;为了提高并发性能&#xff0c;对于一些查询&#xff0c;可以加上nolock&#xff0c;这样读的时候可以允许写&#xff0c;但缺点是可能读到未提交的脏数据。使用 nolock有3条原则。

查询的结果用于“插、删、改”的不能加nolock &#xff01;查询的表属于频繁发生页分裂的&#xff0c;慎用nolock &#xff01;使用临时表一样可以保存“数据前影”&#xff0c;起到类似Oracle的undo表空间的功能&#xff0c;能采用临时表提高并发性能的&#xff0c;不要用nolock 。

  1. 常见的简化规则如下&#xff1a;不要有超过5个以上的表连接&#xff08;JOIN&#xff09;&#xff0c;考虑使用临时表或表变量存放中间结果。少用子查询&#xff0c;视图嵌套不要过深,一般视图嵌套不要超过2个为宜。

  2. 将需要查询的结果预先计算好放在表中&#xff0c;查询的时候再Select。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。

  3. 用OR的字句可以分解成多个查询&#xff0c;并且通过UNION 连接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合索引&#xff0c;用UNION all执行的效率更高.多个OR的字句没有用到索引&#xff0c;改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。

  4. 在IN后面值的列表中&#xff0c;将出现最频繁的值放在最前面&#xff0c;出现得最少的放在最后面&#xff0c;减少判断的次数。

  5. 尽量将数据的处理工作放在服务器上&#xff0c;减少网络的开销&#xff0c;如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句&#xff0c;是控制流语言的集合&#xff0c;速度当然快。反复执行的动态SQL,可以使用临时存储过程&#xff0c;该过程&#xff08;临时表&#xff09;被放在Tempdb中。

  6. 当服务器的内存够多时&#xff0c;配制线程数量 &#61; 最大连接数&#43;5&#xff0c;这样能发挥最大的效率&#xff1b;否则使用 配制线程数量<最大连接数启用SQL SERVER的线程池来解决,如果还是数量 &#61; 最大连接数&#43;5&#xff0c;严重的损害服务器的性能。

  7. 查询的关联同写的顺序

select a.personMemberID, * from chineseresume a,personmember b where personMemberID &#61; b.referenceid and a.personMemberID &#61; ‘JCNPRH39681’ &#xff08;A &#61; B ,B &#61; ‘号码’&#xff09;

select a.personMemberID, * from chineseresume a,personmember b where a.personMemberID &#61; b.referenceid and a.personMemberID &#61; ‘JCNPRH39681’ and b.referenceid &#61; ‘JCNPRH39681’ &#xff08;A &#61; B ,B &#61; ‘号码’&#xff0c; A &#61; ‘号码’&#xff09;

select a.personMemberID, * from chineseresume a,personmember b where b.referenceid &#61; ‘JCNPRH39681’ and a.personMemberID &#61; ‘JCNPRH39681’ &#xff08;B &#61; ‘号码’&#xff0c; A &#61; ‘号码’&#xff09;
26. 尽量使用exists代替select count(1)来判断是否存在记录&#xff0c;count函数只有在统计表中所有行数时使用&#xff0c;而且count(1)比count(*)更有效率。

  1. 尽量使用“>&#61;”&#xff0c;不要使用“>”。

  2. 索引的使用规范&#xff1a;索引的创建要与应用结合考虑&#xff0c;建议大的OLTP表不要超过6个索引&#xff1b;尽可能的使用索引字段作为查询条件&#xff0c;尤其是聚簇索引&#xff0c;必要时可以通过index index_name来强制指定索引&#xff1b;避免对大表查询时进行table scan&#xff0c;必要时考虑新建索引&#xff1b;

在使用索引字段作为条件时&#xff0c;如果该索引是联合索引&#xff0c;那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引&#xff0c;否则该索引将不会被使用&#xff1b;要注意索引的维护&#xff0c;周期性重建索引&#xff0c;重新编译存储过程。

  1. 下列SQL条件语句中的列都建有恰当的索引&#xff0c;但执行速度却非常慢&#xff1a;

SELECT * FROM record WHERE substrINg(card_no,1,4)&#61;’5378’ (13秒)

SELECT * FROM record WHERE amount/30<1000 &#xff08;11秒&#xff09;

SELECT * FROM record WHERE convert(char(10),date,112)&#61;’19991201’ &#xff08;10秒&#xff09;
分析&#xff1a;

WHERE子句中对列的任何操作结果都是在SQL运行时逐列计算得到的&#xff0c;因此它不得不进行表搜索&#xff0c;而没有使用该列上面的索引&#xff1b;如果这些结果在查询编译时就能得到&#xff0c;那么就可以被SQL优化器优化&#xff0c;使用索引&#xff0c;避免表搜索&#xff0c;因此将SQL重写成下面这样&#xff1a;

SELECT * FROM record WHERE card_no like ‘5378%’ &#xff08;<1秒&#xff09;

SELECT * FROM record WHERE amount<1000*30 &#xff08;<1秒&#xff09;

SELECT * FROM record WHERE date&#61; ‘1999/12/01’ &#xff08;<1秒&#xff09;

  1. 当有一批处理的插入或更新时&#xff0c;用批量插入或批量更新&#xff0c;绝不会一条条记录的去更新!

  2. 在所有的存储过程中&#xff0c;能够用SQL语句的&#xff0c;我绝不会用循环去实现!

(例如&#xff1a;列出上个月的每一天&#xff0c;我会用connect by去递归查询一下&#xff0c;绝不会去用循环从上个月第一天到最后一天)

  1. 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;

oracle 的解析器按照从右到左的顺序处理FROM子句中的表名&#xff0c;FROM子句中写在最后的表(基础表 driving table)将被最先处理&#xff0c;在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。

如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.

  1. 提高GROUP BY语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果&#xff0c;但第二个明显就快了许多.

低效:

SELECT JOB , AVG(SAL)

FROM EMP

GROUP BY JOB

HAVING JOB &#61;’PRESIDENT’

OR JOB &#61;’MANAGER’
高效:

SELECT JOB , AVG(SAL)

FROM EMP

WHERE JOB &#61;’PRESIDENT’

OR JOB &#61;’MANAGER’

GROUP BY JOB
34. sql语句用大写&#xff0c;因为oracle 总是先解析sql语句&#xff0c;把小写的字母转换成大写的再执行。

  1. 别名的使用&#xff0c;别名是大型数据库的应用技巧&#xff0c;就是表名、列名在查询中以一个字母为别名&#xff0c;查询速度要比建连接表快1.5倍。

  2. 避免死锁&#xff0c;在你的存储过程和触发器中访问同一个表时总是以相同的顺序;事务应经可能地缩短&#xff0c;在一个事务中应尽可能减少涉及到的数据量;永远不要在事务中等待用户输入。

  3. 避免使用临时表&#xff0c;除非却有需要&#xff0c;否则应尽量避免使用临时表&#xff0c;相反&#xff0c;可以使用表变量代替;大多数时候(99%)&#xff0c;表变量驻扎在内存中&#xff0c;因此速度比临时表更快&#xff0c;临时表驻扎在TempDb数据库中&#xff0c;因此临时表上的操作需要跨数据库通信&#xff0c;速度自然慢。

  4. 最好不要使用触发器&#xff0c;触发一个触发器&#xff0c;执行一个触发器事件本身就是一个耗费资源的过程;如果能够使用约束实现的&#xff0c;尽量不要使用触发器;不要为不同的触发事件(Insert&#xff0c;Update和Delete)使用相同的触发器;不要在触发器中使用事务型代码。

  5. 索引创建规则&#xff1a;

表的主键、外键必须有索引&#xff1b;
数据量超过300的表应该有索引&#xff1b;
经常与其他表进行连接的表&#xff0c;在连接字段上应该建立索引&#xff1b;
经常出现在Where子句中的字段&#xff0c;特别是大表的字段&#xff0c;应该建立索引&#xff1b;
索引应该建在选择性高的字段上&#xff1b;
索引应该建在小字段上&#xff0c;对于大的文本字段甚至超长字段&#xff0c;不要建索引&#xff1b;
复合索引的建立需要进行仔细分析&#xff0c;尽量考虑用单字段索引代替&#xff1b;
正确选择复合索引中的主列字段&#xff0c;一般是选择性较好的字段&#xff1b;
复合索引的几个字段是否经常同时以AND方式出现在Where子句中&#xff1f;单字段查询是否极少甚至没有&#xff1f;如果是&#xff0c;则可以建立复合索引&#xff1b;否则考虑单字段索引&#xff1b;
如果复合索引中包含的字段经常单独出现在Where子句中&#xff0c;则分解为多个单字段索引&#xff1b;
如果复合索引所包含的字段超过3个&#xff0c;那么仔细考虑其必要性&#xff0c;考虑减少复合的字段&#xff1b;
如果既有单字段索引&#xff0c;又有这几个字段上的复合索引&#xff0c;一般可以删除复合索引&#xff1b;
频繁进行数据操作的表&#xff0c;不要建立太多的索引&#xff1b;
删除无用的索引&#xff0c;避免对执行计划造成负面影响&#xff1b;
表上建立的每个索引都会增加存储开销&#xff0c;索引对于插入、删除、更新操作也会增加处理上的开销。另外&#xff0c;过多的复合索引&#xff0c;在有单字段索引的情况下&#xff0c;一般都是没有存在价值的&#xff1b;相反&#xff0c;还会降低数据增加删除时的性能&#xff0c;特别是对频繁更新的表来说&#xff0c;负面影响更大。

尽量不要对数据库中某个含有大量重复的值的字段建立索引。

40&#xff0c;mysql查询优化总结&#xff1a;使用慢查询日志去发现慢查询&#xff0c;使用执行计划去判断查询是否正常运行&#xff0c;总是去测试你的查询看看是否他们运行在最佳状态下。

久而久之性能总会变化&#xff0c;避免在整个表上使用count(*),它可能锁住整张表&#xff0c;使查询保持一致以便后续相似的查询可以使用查询缓存 &#xff0c;在适当的情形下使用GROUP BY而不是DISTINCT&#xff0c;在WHERE, GROUP BY和ORDER BY子句中使用有索引的列&#xff0c;保持索引简单,不在多个索引中包含同一个列&#xff0c;有时候MySQL会使用错误的索引,对于这种情况使用USE INDEX&#xff0c;检查使用SQL_MODE&#61;STRICT的问题&#xff0c;对于记录数小于5的索引字段&#xff0c;在UNION的时候使用LIMIT不是是用OR。

为了避免在更新前SELECT&#xff0c;使用INSERT ON DUPLICATE KEY或者INSERT IGNORE ,不要用UPDATE去实现&#xff0c;不要使用 MAX,使用索引字段和ORDER BY子句&#xff0c;LIMIT M&#xff0c;N实际上可以减缓查询在某些情况下&#xff0c;有节制地使用&#xff0c;在WHERE子句中使用UNION代替子查询.

在重新启动的MySQL&#xff0c;记得来温暖你的数据库&#xff0c;以确保您的数据在内存和查询速度快&#xff0c;考虑持久连接&#xff0c;而不是多个连接&#xff0c;以减少开销&#xff0c;基准查询&#xff0c;包括使用服务器上的负载&#xff0c;有时一个简单的查询可以影响其他查询&#xff0c;当负载增加您的服务器上&#xff0c;使用SHOW PROCESSLIST查看慢的和有问题的查询&#xff0c;在开发环境中产生的镜像数据中 测试的所有可疑的查询。

  1. MySQL 备份过程:

从二级复制服务器上进行备份。在进行备份期间停止复制&#xff0c;以避免在数据依赖和外键约束上出现不一致。彻底停止MySQL&#xff0c;从数据库文件进行备份。

如果使用 MySQL dump进行备份&#xff0c;请同时备份二进制日志文件 – 确保复制没有中断。不要信任LVM 快照&#xff0c;这很可能产生数据不一致&#xff0c;将来会给你带来麻烦。为了更容易进行单表恢复&#xff0c;以表为单位导出数据 – 如果数据是与其他表隔离的。

当使用mysqldump时请使用 –opt。在备份之前检查和优化表。为了更快的进行导入&#xff0c;在导入时临时禁用外键约束。

为了更快的进行导入&#xff0c;在导入时临时禁用唯一性检测。在每一次备份后计算数据库&#xff0c;表以及索引的尺寸&#xff0c;以便更够监控数据尺寸的增长。

通过自动调度脚本监控复制实例的错误和延迟。定期执行备份。

  1. 查询缓冲并不自动处理空格&#xff0c;因此&#xff0c;在写SQL语句时&#xff0c;应尽量减少空格的使用&#xff0c;尤其是在SQL首和尾的空格(因为&#xff0c;查询缓冲并不自动截取首尾空格)。

  2. member用mid做標準進行分表方便查询么&#xff1f;一般的业务需求中基本上都是以username为查询依据&#xff0c;正常应当是username做hash取模来分表吧。分表的话 mysql 的partition功能就是干这个的&#xff0c;对代码是透明的&#xff1b;

在代码层面去实现貌似是不合理的。

  1. 我们应该为数据库里的每张表都设置一个ID做为其主键&#xff0c;而且最好的是一个INT型的&#xff08;推荐使用UNSIGNED&#xff09;&#xff0c;并设置上自动增加的AUTO_INCREMENT标志。

  2. 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON &#xff0c;在结束时设置 SET NOCOUNT OFF 。

无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

  1. MySQL查询可以启用高速查询缓存。这是提高数据库性能的有效Mysql优化方法之一。当同一个查询被执行多次时&#xff0c;从缓存中提取数据和直接从数据库中返回数据快很多。

  2. EXPLAIN SELECT 查询用来跟踪查看效果

使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的&#xff0c;你的数据表是如何被搜索和排序的……等等&#xff0c;等等。

  1. 当只要一行数据时使用 LIMIT 1

当你查询表的有些时候&#xff0c;你已经知道结果只会有一条结果&#xff0c;但因为你可能需要去fetch游标&#xff0c;或是你也许会去检查返回的记录数。在这种情况下&#xff0c;加上 LIMIT 1 可以增加性能。这样一样&#xff0c;MySQL数据库引擎会在找到一条数据后停止搜索&#xff0c;而不是继续往后查少下一条符合记录的数据。

  1. 选择表合适存储引擎&#xff1a;

myisam: 应用时以读和插入操作为主&#xff0c;只有少量的更新和删除&#xff0c;并且对事务的完整性&#xff0c;并发性要求不是很高的。

Innodb&#xff1a;事务处理&#xff0c;以及并发条件下要求数据的一致性。除了插入和查询外&#xff0c;包括很多的更新和删除。&#xff08;Innodb有效地降低删除和更新导致的锁定&#xff09;。对于支持事务的InnoDB类型的表来说&#xff0c;影响速度的主要原因是AUTOCOMMIT默认设置是打开的&#xff0c;而且程序没有显式调用BEGIN 开始事务&#xff0c;导致每插入一条都自动提交&#xff0c;严重影响了速度。可以在执行sql前调用begin&#xff0c;多条sql形成一个事物&#xff08;即使autocommit打开也可以&#xff09;&#xff0c;将大大提高性能。

  1. 优化表的数据类型,选择合适的数据类型&#xff1a;

原则&#xff1a;更小通常更好&#xff0c;简单就好&#xff0c;所有字段都得有默认值,尽量避免null。

例如&#xff1a;数据库表设计时候更小的占磁盘空间尽可能使用更小的整数类型.(mediumint就比int更合适)

比如时间字段&#xff1a;datetime和timestamp, datetime占用8个字节&#xff0c;而timestamp占用4个字节&#xff0c;只用了一半&#xff0c;而timestamp表示的范围是1970—2037适合做更新时间

MySQL可以很好的支持大数据量的存取&#xff0c;但是一般说来&#xff0c;数据库中的表越小&#xff0c;在它上面执行的查询也就会越快。

因此&#xff0c;在创建表的时候&#xff0c;为了获得更好的性能&#xff0c;我们可以将表中字段的宽度设得尽可能小。例如&#xff0c;

在定义邮政编码这个字段时&#xff0c;如果将其设置为CHAR(255),显然给数据库增加了不必要的空间&#xff0c;

甚至使用VARCHAR这种类型也是多余的&#xff0c;因为CHAR(6)就可以很好的完成任务了。同样的&#xff0c;如果可以的话&#xff0c;

我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。

应该尽量把字段设置为NOT NULL&#xff0c;这样在将来执行查询的时候&#xff0c;数据库不用去比较NULL值。

对于某些文本字段&#xff0c;例如“省份”或者“性别”&#xff0c;我们可以将它们定义为ENUM类型。因为在MySQL中&#xff0c;ENUM类型被当作数值型数据来处理&#xff0c;

而数值型数据被处理起来的速度要比文本类型快得多。这样&#xff0c;我们又可以提高数据库的性能。

  1. 字符串数据类型&#xff1a;char&#xff0c;varchar&#xff0c;text选择区别

  2. 任何对列的操作都将导致表扫描&#xff0c;它包括数据库函数、计算表达式等等&#xff0c;查询时要尽可能将操作移至等号右边。


推荐阅读
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
哪来的咸鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有