我在MySQL数据库中有一个英文词典,只有超过250K的条目,而我正在使用一个简单的ruby前端在字符串的开头用通配符搜索它.到目前为止,我一直这样做:
SELECT * FROM words WHERE word LIKE '_e__o'
Run Code Online (Sandbox Code Playgroud)
甚至
SELECT * FROM words WHERE word LIKE '____s'
Run Code Online (Sandbox Code Playgroud)
我总是知道单词的确切长度,但除了单个字符之外的所有字符都可能是未知的.
这比糖蜜慢,比没有前导通配符的类似查询慢15倍,因为无法使用列的索引.
我尝试了一些方法来缩小搜索范围.例如,我添加了26个附加列,其中包含每个单词的单个字母计数,并使用这些列首先缩小搜索范围.我也试过缩小字长.由于领先通配符搜索固有的低效率,这些方法几乎没有差别.我已经尝试了REGEXP语句,这个语句甚至更慢.
SQLite和PostgreSQL与MySQL一样有限,虽然我对NoSQL系统的经验有限,但我的研究给我的印象是他们在可伸缩性方面表现出色,而不是我需要的那种性能.
那么我的问题是,我应该在哪里寻找解决方案?我应该继续尝试找到一种方法来优化我的查询或添加可以缩小我的潜在记录集的补充列吗?是否有专门设计用于实现快速通配符搜索的系统?
我试图找到与特定模式匹配的行数.在这个例子中,所有以"123"开头:
这是有效的:
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'");
$count = mysql_num_rows($query);
Run Code Online (Sandbox Code Playgroud)
问题是LIKE会有所不同,所以我试图在脚本中定义它,然后执行查询,但这不起作用:
$prefix = "123";
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'");
$count = mysql_num_rows($query);
Run Code Online (Sandbox Code Playgroud)
如何在第二个示例中使此查询正常工作?
编辑:我也没有期限尝试过(也没有工作):
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'");
Run Code Online (Sandbox Code Playgroud) 我有一个名为表bank有三列:uid,nick,balance.
我正在尝试创建一个基于缺口返回余额的查询,Unknown column 'Alex' in 'where clause'当我使用此查询时出现错误:
SELECT b.balance FROM bank AS b WHERE b.nick=`Alex` LIMIT 1
Run Code Online (Sandbox Code Playgroud)
谁能看到我在这里做错了什么?
我是LinQ的新手,那些lambdas对我来说显得很棘手:(
我有一张表有两列.First_Name和Last_name.我正在使用LinQ填充gridview.
protected void Page_Load(object sender, EventArgs e)
{
myLinQtoSQLClassDataContext objDataContext = new myLinQtoSQLClassDataContext();
var allUserList = from CurrentUser in objDataContext.Users.Where(c => c.Is_Deleted != false)
select new
{
CurrentUser.First_Name,
CurrentUser.Last_Name,
CurrentUser.Email_ID,
CurrentUser.GUID
};
GridView1.DataSource = allUserList;
GridView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我可以使用LinQ检索值,但我想连接名字和姓氏,中间有空格.
我试图改进的等效SQL查询将是这样的:
Select First_name + ' ' + Last Name as Username, Email_ID, GUID
From tbl_Users where Is_Deleted != false
Run Code Online (Sandbox Code Playgroud)
我怎样才能通过lambda表达式实现这一目标?
所以我有一个表,我想使用sql中的"CREATE VIEW"创建另一个表.我需要复制一份我正在使用的表格,这样我才能使用它2倍.我的SQL查询必须是这样的:
SELECT A.time AS Start, B.time AS Stop
FROM time A, time B
WHERE A.id+1=B.id
AND A.bool=1
AND B.bool=0
Run Code Online (Sandbox Code Playgroud)
我的初始表是:
String sql="create table "+TABLE+" ( "+C_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
+C_TIME+" TEXT, "+C_BOOL+" NUMERIC)";
Run Code Online (Sandbox Code Playgroud)
所以任何人都有任何ideea(在我的代码中)我可以创建视图,我如何在android中查询它?
如果需要,我可以提供代码
谢谢 :)
我正在使用sqldatasource和GridView.我想在RowDataBound事件中从GridView获取单元格的值?因为我无法使用e.RowIndex.
如果单元格为空,如何检查updatng事件?我用过if != null,但它没有用,所以我需要检查它是否为空.
谢谢
我正在尝试YYYY-MM-DD HH:MM:SS从Netezza向Oracle 插入带格式的记录,但是我的日期类型无效.
我怎样才能完成这个?
CREATE TABLE AM_PROGRAM_TUNING_EVENT_TMP1
(
ST TIMESTAMP,
ET TIMESTAMP,
MAS_DIV_KEY INTEGER NOT NULL,
SBSC_GUID_KEY INTEGER NOT NULL,
STN_KEY INTEGER NOT NULL
);
INSERT INTO AM_PROGRAM_TUNING_EVENT_TMP1 VALUES('2012-03-28 11:10:00','2012-03-28 11:30:00',1,3636815,151);
Run Code Online (Sandbox Code Playgroud) 我试图获取存储过程的返回值.以下是此类存储过程的示例:
select
Name,
IsEnabled
from
dbo.something
where
ID = @ID
if @@rowcount = 0
return 1
return
Run Code Online (Sandbox Code Playgroud)
这是一个简单的选择.如果找到0行,我的结果集将为null,但我仍然会有一个返回值.
这是一个糟糕的例子,因为这是一个选择,所以我确定我能找到返回0行.但是,在插入,删除或其他调用中,我们需要此返回值来了解是否存在问题.我一直无法找到获得此返回值的方法.我可以得到输出值,我可以得到结果集,但没有返回值.
如果我手动调用SQL,或者即使我SqlCommand使用实体框架运行,我也可以获得返回值,但这不是我想要做的.
有没有人能够使用Entity Framework从存储过程中获取返回值?
谢谢您的帮助!
我的桌子:
ID NUM VAL
1 1 Hello
1 2 Goodbye
2 2 Hey
2 4 What's up?
3 5 See you
Run Code Online (Sandbox Code Playgroud)
如果我想返回每个ID的最大数量,它真的很干净:
SELECT MAX(NUM) FROM table GROUP BY (ID)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想获取与每个ID的每个数字的最大值相关联的值,该怎么办?
为什么我不能这样做:
SELECT MAX(NUM) OVER (ORDER BY NUM) FROM table GROUP BY (ID)
Run Code Online (Sandbox Code Playgroud)
为什么这是一个错误?我希望这个选择按ID分组,而不是为每个窗口单独分区...
编辑:错误是"不是GROUP BY表达式".
在我的MS SQL Profiler中,我看到了很多这些小问题.
exec sp_execute 1,@ p0 = 15954
我知道这在理论上是有效的,这是执行先前创建的查询并传入特定参数.但问题是我不确定导致这些查询的原因.
有没有办法查看这些查询的TSQL内容?