2/2, 10«12»

SQLite的SQL语法---select

2008-5-13 1:57:03 开发者 抢沙发(0)

SELECT

sql-statement ::= SELECT [ALL | DISTINCT] result [FROM table-list]
[WHERE expr]
[GROUP BY expr-list]
[HAVING expr]
[compound-op select]*
[ORDER BY sort-expr-list]
[LIMIT integer [( OFFSET | , ) integer]]
result ::= result-column [, result-column]*
result-column ::= * | table-name . * | expr [ [AS] string ]
table-list ::= table [join-op table join-args]*
table ::= table-name [AS alias] |
(
select ) [AS alias]
join-op ::= , | [NATURAL] [LEFT | RIGHT | FULL] [OUTER | INNER | CROSS] JOIN
join-args ::= [ON expr] [USING ( id-list )]
sort-expr-list ::= expr [sort-order] [, expr [sort-order]]*
sort-order ::= [ COLLATE collation-name ] [ ASC | DESC ]
compound_op ::= UNION | UNION ALL | INTERSECT | EXCEPT

SQLite测试报告

2008-5-13 1:44:20 开发者 抢沙发(0)

来自官方旧数据

内容为转贴:

数据库速度比较

附注:这篇文档是一篇旧文档。它把老版的SQLite的速度和老版的MySQL和 PostgreSQL的速度进行了对比。读者被热诚地邀请贡献更先进的速度对比在SQLite Wiki.

这里的数字非常老,几乎没什么意义。在更新之前仍使用这篇文档只是为了证明SQLite不是停滞不前的。

执行程序总结

一系列的测试程序已经被运行去测量SQLite 2.7.6,PostgreSQL 7.1.3,和 MySQL 3.23.41 的相对性能。以下是根据实验得出的一些总结:

  • SQLite 2.7.6 是非常快的,有时可以比安装在RedHat 7.2 上的预置的PostgreSQL 7.1.3 快10倍甚至20倍。

  • SQLite 2.7.6 总是很快, 有时比MySQL 3.23.41 快2倍多。

  • SQLite 执行CREATE INDEX or DROP TABLE时不像其它数据库那样快。但这不是什么问题,因为这些是很少运用的操作。

  • 如果你把 multiple 操作聚集到一个单独的事物项,SQLite可以更快些。

但以下几点是值得注意的:

  • 这些测试程序不是在测量多用户使用时数据库的性能,也不是在测量包含multiple的最优化复杂查询。

  • 这些测试是在一个相对小的数据库里完成的(大约14兆字节)。 它们没有测试数据库引擎的大小对程序运行速度的影响有多大。

测试环境

测试所用的平台是一个具有1GB内存的1.6GHz Athlon和一个IDE驱动硬盘。操作系统是具有一个stock内核的RedHat Linux 7.2 。

使用的PostgreSQL 和MySQL服务器被RedHat 7.2 中的默认程序所传送。(PostgreSQL 7.1.3 版和MySQL3.23.41版)所使用的引擎自始至终没有被调整过。需要特别注意的是,RedHat 7.2 中默认的MYSQL配置不支持处理事物项,这一点使MYSQL的速度大大增加。但SQLite还是有能力完成大部分的测试的。

我被告知,RedHat 7.3 中预设的PostgreSQL配置是非常落后的(它必须在具有 8MB RAM 的机器上工作)。 and that PostgreSQL则可以通过调整一些配置来运行的快些。 Matt Sergeant 报道说他已经调整了他的PostgreSQL装置,并且像下面所显示的一样重新进行测试。他的结果显示 PostgreSQL和MySQL运行速度一样。如想查看结果,访问:

http://www.sergeant.org/sqlite_vs_pgsync.html

SQLite实在同样的配置下被测试的,它是用 -O6 optimization 和 -DNDEBUG=1 交叉编写,这样使许多SQLite代码中的"assert()"语句 无法运行。

所有的测试都是在一个静止的机器上进行的。所有的测试时由一个简单的TCL文稿编排程序产生和运行的。 A copy of this Tcl script can be found in the你可以在源文件目录文件SQLite source tree in the file tools/speedtest.tcl中发现TCL文稿编排程序的副本.

所有测试中的时间都是以精确到秒的背景时钟来计算的.SQLite有两个单独的时间值. 第一个时间值在一个完整磁盘同步化打开的默认装置里.同步话打开后,为了确保重要数据已被真正的写入磁盘驱动表面,SQLite在关键的时候执行 fsync()系统调用. 在数据库更新过程中,当操作系统崩溃时或者计算机突然断电时,为了保证数据库的完整性,同步化是非常有必要的.第二个时间值是当同步化关闭的时候.关闭同步化, SQLite有时会运行的快些,但如果系统崩溃或者突然断电数据库将会受到损失. 通常来说,同步化的SQLite的时间是为了和PostgreSQL(因为他也是同步化的)比较,异步化的SQLite是为了和也是异步化的MySQL引擎比较.

 

http://www.sqlite.com.cn/MySqlite/5/180.Html

2/2, 10«12»